我想自动填写双 AcroForm/XFA PDF 表单。我包含了一个 XFA 数据包,所有值都显示在 Adobe Reader 中。我将V=AcroForms 条目中的键设置为新值,所有值都显示为替代 PDF 阅读器。
但是,当我V=在 Adobe Reader 中使用 XFA 和 AcroForm条目打开 PDF 时,只有当前选择的文本字段的值可见:
当 AcroForms 和 XFA 存在时,我在PDF 规范中找不到任何要设置的特殊标志的提及。我假设XFA和Field键的顺序可能很重要,但事实并非如此。
如何更改我的 PDF 文件,以便在启动时在 Adobe Reader 中以及仅支持 AcroForms 而不是 XFA 的 PDF 阅读器中可以看到这些值?
有2个问题需要回答:
在某些情况下,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条目设置为。参见 PDF 规范,1.7,表 8.67:true
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。)
| 归档时间: |
|
| 查看次数: |
1070 次 |
| 最近记录: |