pdfbox将acroform保存为普通pdf

时间:2018-06-20 13:45:14

标签: java pdf pdfbox

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

how my acroform pdf look(opened in browser, no pdfbox use)

我可以在浏览器中对其进行编辑:

editing acroform

在chrome中,创建新文档后,无需打印并使用打印模式就可以:

  • 进入打印模式之前: before going to print mode

  • 打印模式 print mode

边缘

  • 在没有打印模式的情况下看起来还不错: edge

  • 但是在打印模式下,我没有填写字段(带有值): edge print mode

0 个答案:

没有答案