设置AcroForm值时,XFA值最初不可见

时间:2015-11-24 17:17:20

标签: pdf-form xfa

我想自动填写双AcroForm / XFA PDF表格。我包含了一个XFA数据集包,所有值都显示在Adobe Reader中。我将AcroForms条目中的V=键设置为新值,所有值都显示为替代PDF阅读器。

但是,当我在Adobe Reader中使用XFA和AcroForm V=条目打开PDF时,只显示当前所选文本字段的值:

Only the selected field shows text

在AcroForms和XFA出现时,我在PDF specification中找不到要设置的特殊标志。我假设XFAField键的顺序可能很重要,但那也不是。

如何更改my PDF file以便在启动时在Adobe Reader中显示值,在仅支持AcroForms而非XFA的PDF阅读器中

1 个答案:

答案 0 :(得分:3)

有两个问题需要回答:

  1. 为什么Adobe Reader仅在选择字段时显示字段值?
  2. 如何确定是否使用了AcroForm或XFA?
  3. 1。显示的字段值

    在某些情况下,Adobe Reader / Acrobat会根据是否选择来显示表单字段。这对于具有已定义外观的字段而言是典型的,该字段与Reader / Acrobat根据其值(以及可能的某些外观设置)呈现字段的方式不同。

    如果未选择该字段,将显示已定义的外观。选择该字段后,将显示Reader / Acrobat如何呈现它的预览。

    一些背景知识:

    表单字段由逻辑部分(字段名称,字段值,...),称为字段字典和可视化部分组成,称为窗口小部件注释。窗口小部件注释可以选择性地包含 AP 条目,其中包含定义其可视化的外观流。参看 PDF规范,1.7 ,表8.15:

      

    AP - 字典 - 一个外观字典,指定如何在页面上以可视方式显示注释。

    在PDF示例中,没有 AP 条目,即空白可视化。这是所有字段显示的内容。选择字段时,您会根据字段值看到Reader / Acrobat的预览。

    您可以使用Reader / Acrobat手动更改字段值来验证这一点。在这种情况下,将生成并保存新的外观。无论选择与否,该字段现在都将以相同的方式显示。

    在Reader / Acrobat中阻止这些“空白”字段的两个选项:

    • 为所有表单字段生成外观流。我已经为一个字段做了这个(通过简单地使用iText重新设置它的值,它会自动生成一个外观流)。

      结果: appearance

      内部PDF结构:

      AP-RUPS

    • AcroForm 字典中的 NeedAppearances 条目设置为true。参看 PDF规范,1.7 ,表8.67:

        

      NeedAppearances - boolean - 一个标志,指定是否为文档中的所有窗口小部件注释构造外观流和外观词典

      这将触发查看器生成所有外观: needappearances-true

    2。 AcroForm或XFA?

    通常,支持XFA的查看器将显示XFA表单。没有XFA支持的查看器将使用AcroForm。您可以通过为相应的AcroForm和XFA字段设置不同的值来验证这一点。这就是结果,左侧是Chrome的内置PDF查看器(没有XFA支持),右侧是Acrobat: acro-vs-xfa

    知道Reader / Acrobat正在使用XFA表格,为什么我们仍然会看到空白字段(参见问题1)?

    似乎,当XFA字段的值及其相应的AcroForm字段相同时,Reader / Acrobat也使用来自AcroForm的一些信息,即。它的外观信息。当XFA值与AcroForm值不同时,AcroForm字段似乎完全被忽略。

    TL; DR将 NeedAppearances 设置为true以解决空白字段。无XFA的观众将自动退回到AcroForm。

    (我的测试基于Adobe Acrobat X。)