我正在尝试填写 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):

我的 acroform pdf look(opened 如何在浏览器中使用,没有使用 pdfbox)

我可以在浏览器中编辑它:

编辑 acroform

在 chrome 中,在创建新文档后,它看起来没有打印和打印模式:

  • 在进入打印模式之前:
    在进入打印模式之前

  • 打印模式
    打印模式

在边缘

  • 没有打印模式它看起来没问题:
    边缘

  • 但在打印模式下我没有填充我的字段(有价值):
    边缘打印模式