我在这里和'iText in Action'一书中发现了许多解决方案,使用PDFCopy和PDFSmartCopy类合并PDF,但唯一类似的问题问我见过,这个人自己解决了这个问题,但没有提供答案。这篇文章Add an existing PDF from file to an unwritten document using iTextSharp问最后一个问题,所以他们建议关闭现有的文档,然后使用PDFCopy,在这里我想插入任何地方。所以在这里。在iTextSharp中,如何在创建新文档时包含现有的PDF
我使用普通的章节,短语,文档和PDFWriter类创建一个带有文本和图像的iTextSharp文档。这是多年来编写的代码,并且工作正常。现在我们需要在创建这个文档时插入一个现有的PDF,如果这是不可能的,那么这个文档就是一个新的章节或章节。我将PDF作为Byte数组,因此在获取PDFReader时没有问题。但是,我无法知道如何阅读该PDF并在我所处的位置将其插入到现有文档中。如果需要,我可以访问PDFWriter,但对于文档的其余部分,所有访问均通过Sections进行。这是我已经得到的,如果需要的话,我可以添加PDFWriter作为另一个参数。
自从原文发布以来,我已经取得了一些进展并相应地修改了代码。
internal static void InsertPDF(Section section, Byte[] pdf)
{
this.document.NewPage();
PdfReader pdfreader = new PdfReader(pdf);
Int32 pages = pdfreader.NumberOfPages;
for (Int32 page = 1; page <= pages; page++)
{
PdfImportedPage page = this.writer.GetImportedPage(planreader, pagenum);
PdfContentByte pcb = this.writer.DirectContentUnder;
pcb.AddTemplate(page, 0, 0);
this.document.NewPage();
}
}
,靠近做我想要的东西,但我显然不明白的iText奇迹的全部运作,如果这是正确的做法或有更好的方法来做到这一点。
如果有任何其他信息可以提供,请告诉我。
任何指针,将不胜感激。
您是在谈论从现有PDF中引入_content_还是引入_pages_。 PDFs没有“短语”或“段落”,尽管“章节”和“章节”是标记内容的方式,除非实际生成真实的标记pdf,否则这些信息在写出时会丢失。 iTextSharp最大的优势之一就是尽可能长时间隐藏/抽象PDF的内部。唯一既存在抽象又存在PDF对象的是“页面”,这就是为什么大多数代码都建议导入整个页面的原因。 –
我只是试图将现有PDF'按原样'复制为正在创建的文档中的新页面。正如您声明的,我认为该章节或章节不可用,因为它是用于创建新内容的。我可以理解如何通过复制两者的整个Stream来在开始或结束时添加一个,但在中间插入会让我难住。我可以访问PDFWriter,我相信这是我需要的,但我不明白如何将内容添加到该文件中,而不会丢失在文档中构建的PDF。感谢您的评论。 – Graybo
我取得了一些进展,所以修改了这个问题。 – Graybo