我们需要为客户填写表格并获取PDF,他们可以打印,签名和退还。由于PDF必须经常更改,我们使用带有表单字段的PDF模板,这些字段由我们的工具(pdftk)填充。出于各种原因,我想切换到PDFBox(一个是,它要求我们在单个页面中拆分模板并将它们保存到磁盘,填充它们然后再将它们合并在一起)。到目前为止一切正常。
但是我对页码编号感到困惑。由于表单由多个模板组合而成,我必须使用PDFBox修复页码。到目前为止,我们在每个页面上都使用了样式化输入字段page_num
。但由于它们都有相同的名称,我无法单独填写它们。
我可以以某种方式拆分或克隆字段并为其指定个人名称,以便我可以单独填写它们吗?当然,造型应该保持原样。
答案 0 :(得分:1)
在PDFBox的帮助下,我已经开始工作了。我的解决方案是使用JRuby,但我认为您可以很容易地将其转换为Java(删除Java::OrgApachePdfbox...
命名空间)。
doc = Java::OrgApachePdfboxPdmodel::PDDocument.load("input.pdf")
form = doc.getDocumentCatalog.getAcroForm
pages = doc.getDocumentCatalog.getAllPages.toArray.to_a
page_num = form.getField("page_num")
string = page_num.getDictionary
.getDictionaryObject(Java::OrgApachePdfboxCos::COSName::DA)
page_num.getKids.to_array.each do |widget|
widget_dict = widget.getDictionary
widget_dict.setString(Java::OrgApachePdfboxCos::COSName::DA, string.getString)
field = Java::OrgApachePdfboxPdmodelInteractiveForm::PDTextbox.new(
form,
widget_dict
)
field.setParent(page_num)
page = (pages.index(widget.getPage) + 1).to_s
field.setPartialName("page_num_#{page}")
field.setValue(page)
end
doc.save("output.pdf")