使用PDFBox签署PDF时填写修订字段的技术问题
PDFBox表单字段填充、签名元数据及字段锁定问题
我使用Swisscom的PDFBox(v2.0.24)客户端库,尝试给待签署的PDF现有表单字段填充内容,编写了以下Java代码:
try { PDAcroForm acroForm = pdDocument.getDocumentCatalog().getAcroForm(); acroForm.setSignaturesExist(true); acroForm.setAppendOnly(true); acroForm.getCOSObject().setDirect(true); acroForm.getCOSObject().setNeedToBeUpdated(true); FieldInput[] fields = new FieldInput[1]; COSObject pdfFields = acroForm.getCOSObject().getCOSObject(COSName.FIELDS); if (pdfFields != null) { pdfFields.setNeedToBeUpdated(true); } fields[0] = new FieldInput("1", "foobar"); for (int i = 0; i < fields.length; i++) { PDField field = acroForm.getField(fields[0].id); if (field != null) { field.setValue(fields[0].value); Log.info("set field: " + field.getFullyQualifiedName()); } } pdDocument.getDocumentCatalog().getCOSObject().setNeedToBeUpdated(true); } catch (Exception e) { Log.warn(e); }
日志显示字段已设置,但最终文档中的字段仍为空。尝试过相关解决方案但无效,推测是表单处理出错,因为pdfFields的值为null。
更新:添加Tilman建议的field.getCOSObject().setNeedToBeUpdated(true);代码后,字段值已能成功设置,但签名中没有字段填写的相关信息(截图:签名无字段修改记录)。现需解决两个问题:
- PDFBox是否支持像AdobeSign那样,在修订元数据中存储字段填写的详细操作信息(参考截图:AdobeSign修订元数据示例)?
- 锁定已填充字段的最佳方式是什么?目前考虑两种方案:一是设置类似Adobe的字段锁定,二是填充后设置文档保护。
内容的提问来源于stack exchange,提问作者cre8
相关产品推荐
相关产品推荐

