如何在现有的iText文档中添加封面/ PDF

时间:2015-04-10 14:24:13

标签: java pdf itext

我需要iText的帮助。我需要在其他现有的iText文档或PDF文档中添加现有的pdf封面。有人可以帮帮我吗? 我曾在一些书中搜索过(iText在行动中),但它有些复杂。

1 个答案:

答案 0 :(得分:2)

假设我们有一个名为pages.pdf的文档,并且我们想要添加封面hero.pdf作为本文档的封面。

方法1:使用PdfCopy

看看AddCover1示例:

PdfReader cover = new PdfReader("hero.pdf");
PdfReader reader = new PdfReader("pages.pdf");
Document document = new Document();
PdfCopy copy = new PdfCopy(document, new FileOutputStream("pages_with_cover.pdf"));
document.open();
copy.addDocument(cover);
copy.addDocument(reader);
document.close();
cover.close();
reader.close();

结果是一个文档,您首先要有封面,然后是文档的其余部分:pages_with_cover.pdf

方法2:使用PdfStamper

看看AddCover2示例:

PdfReader cover = new PdfReader("hero.pdf");
PdfReader reader = new PdfReader("pages.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("cover_with_pages.pdf"));
stamper.insertPage(1, cover.getPageSizeWithRotation(1));
PdfContentByte page1 = stamper.getOverContent(1);
PdfImportedPage page = stamper.getImportedPage(cover, 1);
page1.addTemplate(page, 0, 0);
stamper.close();
cover.close();
reader.close();

在这种情况下,我们采用原始文档pages.pdf,然后插入一个与封面页面大小相同的新页面1。然后,我们会收到page1,并将hero.pdf的第一页添加到第一页。结果是cover_with_pages.pdf

这两种方法有什么区别?

使用PdfCopy,您可能会丢失在文档级别定义的某些属性(例如页面布局设置),但您保留了两个文件的交互功能。您可能需要设置一些参数,以防您想要保留标记,表单字段等...但对于简单的PDF,您不需要全部。

使用PdfStamper,您可以保留在pages.pdf文档级别定义的属性,但会丢失封面的所有交互功能(如果有)。如果你想将封面定义为工件并且原始封面页面有奇怪的页面边界,你可能需要调整这个例子,但这会让我们在这个简单的答案中讨论这个问题太过分了。

相关问题