设置AcroForm值时,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)

2 years ago

有两个问题需要回答:

  • 为什么Adobe Reader仅在选择字段时显示字段值?

  • 如何确定是否使用AcroForm或XFA?

1.显示的字段值

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

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

一些背景:

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

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

在示例PDF中,没有 AP 条目,即空白可视化 . 这是_2779874的预览,基于字段值 .

您可以通过使用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设置 NeedAppearancestrue 以解决空白字段 . 无XFA的 Spectator 将自动退回到AcroForm .

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