我正在尝试填写 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 上没有 work(both 我有空白字段)。我认为这是因为 pdfbox 仍然将 pdf 保存为 acroform。如何将其保存为普通的 pdf 并插入字段值?
更新:
我的 acroform pdf look(opened 如何在浏览器中使用,没有使用 pdfbox):
我可以在浏览器中编辑它:
在 chrome 中,在创建新文档后,它看起来没有打印和打印模式:
-
在进入打印模式之前:
-
打印模式
在边缘
-
没有打印模式它看起来没问题:
-
但在打印模式下我没有填充我的字段(有价值):