当前位置: 首页 > 面试题库 >

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

施超
2023-03-14
问题内容

我需要有关iText的帮助。我需要在其他现有的iText文档或PDF文档中添加现有的pdf封面。有人可以帮助我吗?我已经搜索了一些书籍(iText在使用中),但有些复杂。


问题答案:

假设我们有一个名为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,但是会丢失封面的所有交互功能(如果有)。如果要将封面定义为工件,并且原始封面的页面边界很奇怪,则可能需要调整示例,但这会使我们讨论这个简单的答案太过分了。



 类似资料:
  • 我正在使用iText(特别是iTextSharp 4.1.6),我想通过组合现有PDF中的页面来创建一个PDF,但也要插入从图像创建的新页面。 我已经分别使用PdfCopy和PdfWriter实现了这两个部分的工作。从图像创建页面的代码如下所示: 现在,由于PdfCopy继承自PdfWriter,我想我可以使用相同的技术将这样的“图像页面”添加到我的PdfCopy对象中,但这不起作用(如果在上面的

  • 我不需要添加书签或其他动态内容,只需要添加一些具有名称的目的地,从而注入一个/Dests集合,该集合具有在生成的PDF中定义的名称。 我使用了iText 5.3.0并且阅读了iText Inaction(第2版)的第7章,但是我仍然不知道如何添加目的地,所以在浏览器中使用#namedest。 我正在用PdfReader和PDFStamper阅读和操作文档。在使用定制的侦听器和PdfContentS

  • 我是新来的。我有一个不同内容的文档列表,我想合并成一个单独的PDF。内容类型为PDF、JPG 这是我的代码: 合并PDF只工作得很好,但每次我合并一个图像我得到这个: 带有粉红色的图像被放置在先前PDF的文本上

  • 我正在使用iText 5.3.5创建一个pdf文档。现在,我正试图在文档的每一页上得到一个矩形,但我不太确定如何做到这一点。我试着在代码的末尾添加这个(我是在网上找到的): 但这只是在最后一页添加了矩形,这有点意义,因为我没有在任何地方使用pgCnt。我如何指定我想要页号pgCnt上的矩形,以便我可以在每一页上添加矩形? 希望我能解释清楚。提前感谢你的帮助。:)

  • 问题内容: 我想对iText执行以下操作: (1)解析现有的PDF文件 (2)在文档的现有单页上添加一些数据(例如时间戳) (3)写出文件 我似乎无法弄清楚如何使用iText做到这一点。用伪代码可以做到这一点: Document document = reader.read(input); document.add(new Paragraph(“my timestamp”)); writer.wr

  • //步骤1:创建文档-对象文档Document=new Document(); 提前道谢。