使用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里转,应该分两步处理:
- 先用dinktopdf把你需要的HTML内容转换为独立的PDF字节数组
- 用专门的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
相关产品推荐
相关产品推荐

