我正在尝试填写pdf acroform。我填写了以下字段:
acroForm.getField(key).setValue(value);
然后我将字段设置为只读:
acroForm.getFields().forEach(f->f.setReadOnly(true));
我正在保存。它在谷歌浏览器中看起来不错,但是在边缘上,当我单击打印按钮时,我填写的字段为空白。我的完整代码:
PDDocument pdfDocument = PDDocument.load(ResourceUtils.getFile("classpath:" + templatePath));
PDDocumentCatalog docCatalog = pdfDocument.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
if(acroForm != null){
fieldValueMap.forEach((key, value) -> {
try {
acroForm.getField(key).setValue(value);
} catch (IOException e) {
Logger.getAnonymousLogger().info("Error: no such field in AcroForm");
}
});
acroForm.getFields().forEach(f->f.setReadOnly(true));
}
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
pdfDocument.save(outputStream);
pdfDocument.close();
return addSecuredResource(outputStream.toByteArray());
我试图使用flatten()函数,但是它不起作用(在chrome和edge上我都有空白字段)。我认为这是由于pdfbox将pdf仍保存为acroform。如何将其保存为带有字段插入值的普通pdf?
更新:
我的acroform pdf外观如何(在浏览器中打开,未使用pdfbox):
我可以在浏览器中对其进行编辑:
在chrome中,创建新文档后,无需打印并使用打印模式就可以:
边缘