【发布时间】:2021-10-03 16:30:59
【问题描述】:
我正在使用 itext 7 从 Html 文件中创建多页 PDf。
MemoryStream finalDocumenStream = new MemoryStream();
StampingProperties documentProperties = new StampingProperties();
documentProperties.UseAppendMode();
PdfDocument finalPDfDocument = new PdfDocument(new PdfWriter(finalDocumenStream),
documentProperties);
我在一个数组上的 foreach 中循环并调用此方法来创建文档:
CustomTagWorkerFactory customTagWorkerFactory = new CustomTagWorkerFactory(page);
Document pDFdocument = HtmlConverter.ConvertToDocument(htmltext, new PdfWriter(stream),
converterProperties);
我想将文档保存到 finalPdfDocumet
pDFdocument.GetPdfDocument().CopyPagesTo(1,
pDFdocument.GetPdfDocument().GetNumberOfPages(), finalPDfDocument);
在 foreach() 之后,我返回了 finalDocumenStream;我期待着把所有的文件都放在这里。 我想从我的 .Net Api 控制器返回 Pdf Stream: return File(pdfStream, "application/pdf");
我无法合并迭代内部的流并将文档返回给客户端。
我做错了什么?有什么建议吗? 感谢您的帮助?
【问题讨论】:
-
首先请注意,使用
PdfWriter创建的PdfDocument实例通常一方面包含未完成的对象,另一方面已经将数据写入PdfWriter。因此,您无法将页面从它们干净地复制到其他文档。通常会抛出这样的异常......因此,要组合此类文档,最初将它们定位到MemoryStream,完成后关闭它们,并仅基于初始化的PdfReader构造一个新的PdfDocumentMemoryStream. -
@mkl 非常感谢您的回答。我尝试了以下但得到“找不到 PDF 标题”:
pDFdocument.GetPdfDocument().CopyPagesTo(1, pDFdocument.GetPdfDocument().GetNumberOfPages(), finalPDfDocument); pdfWriter.GetOutputStream().CopyTo(finalDocumenStream); finalPdfDocuments.Add( new PdfDocument(new PdfReader(finalDocumenStream))) -
获取
PdfWriter输出流没有帮助,因为在作者的文档关闭之前它不包含任何完整的内容。有关我的评论的更详细版本,请参阅我的答案。