当前位置: 首页 > 知识库问答 >
问题:

如何使用带有表单的源文档作为PDFBox中多页目标文档的模板

盖晋
2023-03-14

我在Java中使用PDFBox 1.2.1,我试图使用单页pdf文档,其中包含一个acro表单,作为制作多页目标pdf的模板。

PDDocument sourceDocument = PDDocument.load(fileStream);
PDDocument targetDocument = new PDDocument();
PDDocumentCatalog sourceDocCatalog = sourceDocument.getDocumentCatalog();
PDAcroForm acroFormFromSource = sourceDocCatalog.getAcroForm();
targetDocument.getDocumentCatalog().setAcroForm(acroFormFromSource);
PDPage templatePdfPage = (PDPage) sourceDocument.getDocumentCatalog().getAllPages().get(0);

  for (int i = 0; i < 5; i++) {

    targetDocument.addPage(templatePdfPage);
    PDDocumentCatalog targetDocumentsDocumentCatalog = targetDocument.getDocumentCatalog();
    PDAcroForm acroForm = targetDocumentsDocumentCatalog.getAcroForm();
    acroForm.getField("Text1").setValue("Car " + i);
  }

不幸的是,生成的目标pdf包含5页,但每一页都有具有相同值“Car 4”的Text1字段。所以每一页都是相同的acro表单。是否有可能为每一页生成新的唯一acro表单,或者对于我的用例还有其他可能的解决方案?

共有1个答案

谷星文
2023-03-14

我认为问题在于,您对所有页面都使用相同的Java对象acroFormFromSource,因此当您在第4页(第0页到第4页的最后一页)设置“Text1”字段时,它会对所有5页进行设置。

我认为你需要为每一页制作一份新的原始PDAcroForm副本。我认为制作副本最简单的方法是使用cosdirectionary的copy构造函数(cosdirectionary(cosdirectionary dict))。但要注意,这是一个肤浅的复制!

 类似资料:
  • 我正在使用PDFbox来提取PDF文档中单词/字符串的坐标,并且到目前为止已经成功地确定了单个字符的位置。 这将生成一系列包含每个字符位置的行,包括空格,如下所示: 其中“P”是字符。我还没有在PDFbox中找到查找单词的函数,而且我对Java还不够熟悉,无法将这些字符准确地连接回单词中进行搜索,即使空格也包括在内。有没有其他人遇到过类似的情况,如果有,你是如何处理的?我真的只需要单词中第一个字符

  • 我正在尝试从Java结果集创建PDF报告。如果报告只有一页,我在这里就没有问题了。这个问题源于这样一个事实:这份报告可能有一到十页长。现在,我要创建一个单页文档: 所以我的问题是,如何根据需要动态创建页面。有没有一个面向对象的答案盯着我看,而我就是看不见?

  • Apache PDFBox 是一个开源 Java 库,支持 PDF 文档的开发和转换。在本教程中,我们将学习如何使用 PDFBox 开发可以创建,转换和操作 PDF 文档的 Java 程序。

  • 我正在使用PDFBox和java生成pdf文档。该文档有几页文字和图像。每页的页眉和页脚都有相同的图像。目前,我正在创建一个新的PDImageXObject,并在每次添加新页面时使用该新对象调用drawImage()。生成的文档非常重,我认为是因为它包含同一图像的重复副本。 最有效的方法是什么?。最有可能的是,pdfbox有一种更好的方式来管理文档范围内的资源。我是pdfbox的新手,坦率地说,我

  • 我似乎不知道如何使用PDFBox及其PDFPagePanel组件查看PDF页面。 因此,使用PDFBox,我的选项似乎是创建PDPage对象或PDDocument对象的列表,我使用了PDPage列表(而不是对PDDocument对象使用) 下面的代码创建一个名为testPage的PDPage对象 在这里,我想创建一个并使用它的方法将PDPage放入组件中。从这里开始,我想将组件添加到JFrame中

  • 如果需要创建多个页面,或者需要多级路由的网站,在 docsify 里也能很容易的实现。例如创建一个 guide.md 文件,那么对应的路由就是 /#/guide。 假设你的目录结构如下: . └── docs ├── README.md ├── guide.md └── zh-cn ├── README.md └── guide.md 那么