You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用dinktopdf附加现有PDF到新PDF时生成空白页问题求助

问题原因

你遇到的空白页问题是dinktopdf底层依赖的wkhtmltopdf工具本身的功能限制,和你的代码实现、Docker配置无关。
wkhtmltopdf使用的是老旧版本的WebKit渲染引擎,仅支持将HTML/CSS/JS内容渲染为PDF,完全不支持解析渲染内嵌在HTML中的PDF文件,不管你用iframe、embed还是object标签加载PDF(无论是本地路径还是base64格式的data URI),都只会输出空白内容。

正确实现方案

你要实现「新生成PDF + 现有PDF拼接」的需求,不要尝试把现有PDF嵌到HTML里转,应该分两步处理:

  1. 先用dinktopdf把你需要的HTML内容转换为独立的PDF字节数组
  2. 用专门的PDF处理工具库,把新生成的PDF和现有PDF文件合并为一个文件

推荐使用跨平台的PdfSharp库完成合并,示例代码如下:
首先安装Nuget包:PdfSharp-MigraDoc.Core(支持Linux Docker环境)

using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;

// 合并两个PDF字节数组
public byte[] MergePdfFiles(byte[] newGeneratedPdf, byte[] existingPdf)
{
    using var outputStream = new MemoryStream();
    var outputDoc = new PdfDocument();

    // 添加新生成的PDF的所有页
    using var newPdfStream = new MemoryStream(newGeneratedPdf);
    using var newPdf = PdfReader.Open(newPdfStream, PdfDocumentOpenMode.Import);
    foreach (var page in newPdf.Pages)
    {
        outputDoc.AddPage(page);
    }

    // 添加现有PDF的所有页
    using var existingPdfStream = new MemoryStream(existingPdf);
    using var oldPdf = PdfReader.Open(existingPdfStream, PdfDocumentOpenMode.Import);
    foreach (var page in oldPdf.Pages)
    {
        outputDoc.AddPage(page);
    }

    outputDoc.Save(outputStream);
    return outputStream.ToArray();
}

业务逻辑调整

你原来的代码只需要修改Generate方法的逻辑即可:

  • 先调用dinktopdf生成新的HTML对应的PDF字节数组
  • 拿到你要拼接的现有PDF的字节数组
  • 调用上面的合并方法得到最终的PDF文件

内容的提问来源于stack exchange,提问作者alexandre trapp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 10:24:04