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

时间:2012-09-16 06:29:16

标签: java pdfbox

我在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个页面,但每个页面都有Text1字段,其值相同,为“Car 4”。所以每个页面都是相同的形式。是否有可能为每个页面生成新的独特ac​​ro表单,或者是否有其他可能的解决方案用于我的用例?

1 个答案:

答案 0 :(得分:0)

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

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