一个简单的问题,如何使用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写入磁盘--->读取->另一个异常
任何想法!
答案 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