0

我在 Java 中使用 PDFBox 1.2.1,我正在尝试使用其中包含 acro 表单的单页 pdf 文档作为制作多页目标 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 页,但每个页面都有 Text1 字段,其值为“Car 4”。所以每个页面都是相同的 acro 形式。是否有可能为每个页面生成新的唯一 acro 表单,或者我的用例是否有其他可能的解决方案?

4

1 回答 1

0

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

我认为您需要为每个页面制作一个原始 PDAcroForm 的新副本。COSDictionary( COSDictionary dict )我怀疑制作副本的最简单方法是使用 CosDictionary ( )的复制构造函数。但是请注意,这会产生浅拷贝!

于 2012-09-16T17:50:44.427 回答