如何在现有 iText 文档中添加 cover/PDF
How to add a cover/PDF in a existing iText document
我需要一些 iText 方面的帮助。我需要在其他现有的 iText 文档或 PDF 文档中添加现有的 pdf 封面。有人可以帮助我吗?
我在一些书中搜索过(iText in action)但它有点复杂。
假设我们有一份名为pages.pdf and that we want to add the cover hero.pdf的文档作为本文档的封面。
方法一:使用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
方法二:使用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
的文档级别定义的属性,但您失去了封面的所有交互功能(如果有)。如果您想将封面定义为人工制品并且原始封面页的页面边界奇数,您可能需要调整示例,但在这个简单的答案中讨论这个问题会让我们走得太远。
我需要一些 iText 方面的帮助。我需要在其他现有的 iText 文档或 PDF 文档中添加现有的 pdf 封面。有人可以帮助我吗? 我在一些书中搜索过(iText in action)但它有点复杂。
假设我们有一份名为pages.pdf and that we want to add the cover hero.pdf的文档作为本文档的封面。
方法一:使用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
方法二:使用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
的文档级别定义的属性,但您失去了封面的所有交互功能(如果有)。如果您想将封面定义为人工制品并且原始封面页的页面边界奇数,您可能需要调整示例,但在这个简单的答案中讨论这个问题会让我们走得太远。