使用PDFBox克隆具有所有样式的表单字段

使用PDFBox克隆具有所有样式的表单字段,pdf,pdfbox,Pdf,Pdfbox,我们需要为我们的客户填写一份表格,并获得一份PDF,他们可以打印、签名并发回。由于PDF必须频繁更改,我们使用带有表单字段的PDF模板,表单字段由我们的工具(pdftk)填充。出于各种原因,我想切换到PDFBox(一个原因是,它要求我们将模板拆分为各个页面,并将它们保存到磁盘,填充它们,然后再次将它们合并在一起)。到目前为止一切正常 但我很难确定页码。由于表单由多个模板组合而成,因此我必须使用PDFBox修复页码。到目前为止,我们在每个页面上都使用了一个样式化的输入字段page\u num。但是

我们需要为我们的客户填写一份表格,并获得一份PDF,他们可以打印、签名并发回。由于PDF必须频繁更改,我们使用带有表单字段的PDF模板,表单字段由我们的工具(pdftk)填充。出于各种原因,我想切换到PDFBox(一个原因是,它要求我们将模板拆分为各个页面,并将它们保存到磁盘,填充它们,然后再次将它们合并在一起)。到目前为止一切正常

但我很难确定页码。由于表单由多个模板组合而成,因此我必须使用PDFBox修复页码。到目前为止,我们在每个页面上都使用了一个样式化的输入字段
page\u num
。但是因为他们都有相同的名字,我不能单独填写


我能否以某种方式拆分或克隆字段并给它们单独的名称,以便可以单独填充它们?当然,样式应该保持原样。

在PDFBox的帮助下,我让它开始工作。我的解决方案是使用JRuby,但我认为您可以非常轻松地将其转换为Java(删除
Java::OrgApachePdfbox…
名称空间)

doc=Java::OrgApachePdfboxPdmodel::PDDocument.load(“input.pdf”)
表单=doc.getDocumentCatalog.getAcroForm
pages=doc.getDocumentCatalog.getAllPages.toArray.to_a
page\u num=form.getField(“page\u num”)
string=page\u num.getDictionary
.getDictionaryObject(Java::OrgApachePdfboxCos::COSName::DA)
page_num.getKids.to_array.each do|小部件|
widget\u dict=widget.getDictionary
widget_dict.setString(Java::OrgApachePdfboxCos::COSName::DA,string.getString)
field=Java::OrgApachePdfboxPdmodelInteractiveForm::PDTextbox.new(
形式,
小工具目录
)
field.setParent(页码)
page=(pages.index(widget.getPage)+1)到
field.setPartialName(“page_num_35;{page}”)
字段设置值(第页)
结束
doc.save(“output.pdf”)