我在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”。所以每个页面都是相同的形式。是否有可能为每个页面生成新的独特acro表单,或者是否有其他可能的解决方案用于我的用例?
答案 0 :(得分:0)
我认为问题在于你为所有页面使用相同的Java对象acroFormFromSource
,所以当你在第4页(第0页到第4页的最后一页)设置“Text1”字段时,它是为所有5页设置它。
我认为您需要为每个页面制作原始PDAcroForm的新副本。我怀疑制作副本的最简单方法是使用CosDictionary(COSDictionary( COSDictionary dict )
)的复制构造函数。但请注意,这会产生浅色副本!