合并两个PdfDocument对象

时间:2018-12-14 16:03:18

标签: c# pdf itext7

一个简单的问题,如何使用itext7 .net库合并两个PdfDocument对象?

这是尝试的方法,但是不起作用

PdfDocument GlobalPdfDocument = new PdfDocument(new PdfWriter(multiContentPdf));

PdfDocument InitialPdfDoc = new PdfDocument(new PdfWriter(memStreamOfAddressAndBarcode));
InitialPdfDoc.CopyPagesTo(1, InitialPdfDoc.GetNumberOfPages(), GlobalPdfDocument);

此代码还会引发相同的异常

Merger.Merge(InitialPdfDoc,1,InitialPdfDoc.GetNumberOfPages());
  

无法从正在编写的文档中复制间接对象

还尝试将嵌套的pdf写入磁盘--->读取->另一个异常

任何想法!

1 个答案:

答案 0 :(得分:1)

首先:您的代码

findAll()

起作用!!它不会引发任何异常,而是什么也不会复制到Pagerfanta。这是正确的,因为PdfDocument GlobalPdfDocument = new PdfDocument(new PdfWriter(multiContentPdf)); PdfDocument InitialPdfDoc = new PdfDocument(new PdfWriter(memStreamOfAddressAndBarcode)); InitialPdfDoc.CopyPagesTo(1, InitialPdfDoc.GetNumberOfPages(), GlobalPdfDocument); 是新创建的,尚不包含任何页面。

但是,假设您只是没有提供足够的代码来重现此问题,假设您的实际代码在调用GlobalPdfDocument方法之前为InitialPdfDoc添加了一些内容,例如

InitialPdfDoc

现在确实存在声称的例外情况:

CopyPagesTo

该异常清楚地说明了代码的问题:您的文档PdfDocument GlobalPdfDocument = new PdfDocument(new PdfWriter(multiContentPdf)); PdfDocument InitialPdfDoc = new PdfDocument(new PdfWriter(memStreamOfAddressAndBarcode)); InitialPdfDoc.AddNewPage(); InitialPdfDoc.CopyPagesTo(1, InitialPdfDoc.GetNumberOfPages(), GlobalPdfDocument); 被写入(即它具有关联的iText.Kernel.PdfException : Cannot copy indirect object from the document that is being written. ),因此无法从中复制页面。

无法从写入的文档复制页面的限制是由于iText体系结构:写入文档时,iText尝试尽快将此新内容推送到InitialPdfDoc输出流中尽可能地忘记它。这使iText可以轻松生成大型结果PDF,而无需占用大量内存。缺点是您面临的限制。

因此,一个明显的解决方案是完成创建要复制的PDF,在没有编写器的情况下将其读入文档对象,然后从那里复制:

PdfWriter