【问题标题】:PDF Form Field Contents not displayedPDF 表单域内容未显示
【发布时间】:2016-12-22 14:59:32
【问题描述】:

我使用 Apache PDFBox (Java) 以编程方式生成带有表单域的 PDF。但是,当使用 PDF.JS/Firefox 加载 PDF 时,不会显示这些字段的内容。使用独立查看器或 Chrome 打开文件时,该字段的内容会正确显示。

我知道 PDF.JS 不支持编辑 AcroForms,但我读到仅显示应该没有任何问题。

这是一个生成的 PDF,在 PDF.JS/Firefox 中无法正确显示:

https://drive.google.com/file/d/0B197M5cYPdP4U2hhV1U2UURpSE0/view?usp=sharing

【问题讨论】:

  • 您是如何生成 PDF 的?你能分享一个示例代码吗?您使用的是哪个版本的 PDFBox?没有显示任何内容的原因是,虽然表单字段的值已设置,但并没有进入外观流,即它几乎是空的。外观流用于显示字段内容。
  • PDF 由 LibreOffice 4.2.8.2 生成(文件 -> 导出为 PDF)。然后字段由 PDFBox 设置。但我也尝试用 LibreOffice 填写表格,但内容也没有显示……所以我认为问题与使用 LibreOffice 生成 PDF 有关。目前我正在尝试使用另一个应用程序 (Acrobat DC Pro) 生成 PDF。
  • OpenOffice / LibreOffice 倾向于在 NeedAppearances 标志设置为 true 的情况下导出 PDF;这要求 PDF 查看器生成外观。填充此类 PDF 的 PDF 处理器通常通过不自己创建外观来对该标志做出反应;毕竟,PDF 查看器被要求生成外观。不幸的是,许多不完整的 PDF 查看器不知道如何生成外观。因此,他们忽略了旗帜并展示了他们的发现:没有出现。
  • 在设置字段值之前,请将 NeedAppearances 标志设置为 false。如果标志设置为 true,PDFBox 2.0.x 不会创建外观流。 2.1.x 将改变这一点并始终生成外观流,无论标志是真还是假。

标签: javascript firefox pdf pdf-generation pdf.js


【解决方案1】:

解决方案是将标志“NeedAppearances”设置为 false,如 cmets 中提到的 mkl 和 Maruan Sahyoun。谢谢。

PDDocumentCatalog docCatalog = _pdfDocument.getDocumentCatalog();
PDAcroForm acroForm = docCatalog.getAcroForm();
acroForm.setNeedAppearances(false);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-17
    • 1970-01-01
    • 2019-11-13
    • 2022-11-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多