我想自动填写双AcroForm / XFA PDF表格。我包含了一个XFA数据集包,所有值都显示在Adobe Reader中。我将AcroForms条目中的V=
键设置为新值,所有值都显示为替代PDF阅读器。
但是,当我在Adobe Reader中使用XFA和AcroForm V=
条目打开PDF时,只显示当前所选文本字段的值:
在AcroForms和XFA出现时,我在PDF specification中找不到要设置的特殊标志。我假设XFA
和Field
键的顺序可能很重要,但那也不是。
如何更改my PDF file以便在启动时在Adobe Reader中显示值,在仅支持AcroForms而非XFA的PDF阅读器中和?
答案 0 :(得分:3)
有两个问题需要回答:
在某些情况下,Adobe Reader / Acrobat会根据是否选择来显示表单字段。这对于具有已定义外观的字段而言是典型的,该字段与Reader / Acrobat根据其值(以及可能的某些外观设置)呈现字段的方式不同。
如果未选择该字段,将显示已定义的外观。选择该字段后,将显示Reader / Acrobat如何呈现它的预览。
一些背景知识:
表单字段由逻辑部分(字段名称,字段值,...),称为字段字典和可视化部分组成,称为窗口小部件注释。窗口小部件注释可以选择性地包含 AP 条目,其中包含定义其可视化的外观流。参看 PDF规范,1.7 ,表8.15:
AP - 字典 - 一个外观字典,指定如何在页面上以可视方式显示注释。
在PDF示例中,没有 AP 条目,即空白可视化。这是所有字段显示的内容。选择字段时,您会根据字段值看到Reader / Acrobat的预览。
您可以使用Reader / Acrobat手动更改字段值来验证这一点。在这种情况下,将生成并保存新的外观。无论选择与否,该字段现在都将以相同的方式显示。
在Reader / Acrobat中阻止这些“空白”字段的两个选项:
为所有表单字段生成外观流。我已经为一个字段做了这个(通过简单地使用iText重新设置它的值,它会自动生成一个外观流)。
内部PDF结构:
将 AcroForm 字典中的 NeedAppearances 条目设置为true
。参看 PDF规范,1.7 ,表8.67:
NeedAppearances - boolean - 一个标志,指定是否为文档中的所有窗口小部件注释构造外观流和外观词典
通常,支持XFA的查看器将显示XFA表单。没有XFA支持的查看器将使用AcroForm。您可以通过为相应的AcroForm和XFA字段设置不同的值来验证这一点。这就是结果,左侧是Chrome的内置PDF查看器(没有XFA支持),右侧是Acrobat:
知道Reader / Acrobat正在使用XFA表格,为什么我们仍然会看到空白字段(参见问题1)?
似乎,当XFA字段的值及其相应的AcroForm字段相同时,Reader / Acrobat也使用来自AcroForm的一些信息,即。它的外观信息。当XFA值与AcroForm值不同时,AcroForm字段似乎完全被忽略。
TL; DR将 NeedAppearances 设置为true
以解决空白字段。无XFA的观众将自动退回到AcroForm。
(我的测试基于Adobe Acrobat X。)