创建包含多个带有文本的页面的PDf



我正在使用text7从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);

我想把文档保存到finalpdfdocument

pDFdocument.GetPdfDocument().CopyPagesTo(1, 
pDFdocument.GetPdfDocument().GetNumberOfPages(), finalPDfDocument);

在foreach()之后,我返回了finaldocumentstream;我还以为所有的文件都在这里呢。我想从我的。net Api控制器返回Pdf流:return File(pdfStream, "application/pdf");

我无法将迭代内部的流组合并将文档返回给客户端。

我做错了什么?有什么建议吗?谢谢你的帮助。

首先请注意,使用PdfWriter创建的PdfDocument实例通常一方面包含未完成的对象,另一方面已经将数据写入PdfWriter。因此,您不能干净地将页面从它们复制到其他文档。

当你试图从那里复制时,通常甚至会抛出一个异常。您可能会捕捉并忽略这些异常吗?

因此,要组合这样的文档,首先将它们定位到MemoryStream,当它们完成时关闭它们,并且仅基于用该MemoryStream初始化的PdfReader构建一个新的PdfDocument

PdfDocument fullDocument = new PdfDocument(...);
...
MemoryStream ms = new MemoryStream();
PdfDocument partialDoc = new PdfDocument(new PdfWriter(ms));
[... add content to partialDoc ...]
partialDoc.Close();
partialDoc = new PdfDocument(new PdfReader(ms.ToArray()));
partialDoc.CopyPagesTo(1, partialDoc.GetNumberOfPages(), fullDocument);
partialDoc.Close();
...
fullDocument.Close();

最新更新