当设置 AcroForm 值时,XFA 值最初是不可见的
XFA values initially invisible when AcroForm values are set
我想自动填写双重 AcroForm/XFA PDF 表单。我包含了一个 XFA 数据集包,所有值都显示在 Adobe Reader 中。我将 AcroForms 条目中的 V=
键设置为新值,所有值都显示在替代 PDF 阅读器中。
但是,当我在 Adobe Reader 中使用 XFA 和 AcroForm V=
条目打开 PDF 时,只有当前选定的文本字段的值可见:
我在 PDF specification 中找不到任何提及在存在 AcroForms 和 XFA 时要设置的特殊标志。我假设 XFA
和 Field
键的顺序可能很重要,但事实并非如此。
如何更改 my PDF file 以便在启动时在 Adobe Reader 中可以看到这些值,在仅支持 AcroForms 而不支持 AcroForms 的 PDF 阅读器中可以看到 和 XFA?
有2个问题需要回答:
- 为什么 Adobe Reader 仅在选择字段时显示字段值?
- 如何判断使用的是AcroForm还是XFA?
1。显示字段值
在某些情况下,Adobe Reader/Acrobat 会根据表单域是否被选中以不同方式显示表单域。这对于具有定义的 appearance 的字段来说是典型的,它不同于 Reader/Acrobat 根据其值(可能还有一些外观设置)呈现字段的方式。
未选中该字段时,将显示定义的外观。选择该字段后,会显示 Reader/Acrobat 将如何呈现它的预览。
一些背景:
表单字段由逻辑部分(字段名称、字段值...)组成,称为 字段字典 ,以及可视化部分,称为 小部件注释。小部件注释可以选择包含一个 AP 条目,其中包含定义其可视化的外观流。比照。 PDF 规范,1.7,Table 8.15:
AP - dictionary - An appearance dictionary specifying how the annotation is presented visually on the page.
示例 PDF 中没有 AP 条目,即空白可视化。这是所有字段的显示内容。选择字段时,您会根据字段值看到 Reader/Acrobat 的预览。
您可以通过使用 Reader/Acrobat 手动更改字段值来验证这一点。在这种情况下,将生成并保存一个新的外观。该字段现在将以相同的方式显示,无论它是否被选中。
防止 Reader/Acrobat 中这些 "blank" 字段的两个选项:
为所有表单字段生成外观流。我已经为一个字段完成了此操作(通过使用自动生成外观流的 iText 简单地重新设置它的值)。
结果:
内部 PDF 结构:
将 AcroForm 词典中的 NeedAppearances 条目设置为 true
。比照。 PDF 规范,1.7,Table 8.67:
NeedAppearances - boolean - A flag specifying whether to construct appearance streams and appearance dictionaries for all widget annotations in the document
这将触发查看器生成所有外观:
2。 AcroForm 还是 XFA?
通常,支持 XFA 的查看器将显示 XFA 表单。不支持 XFA 的查看器将使用 AcroForm。您可以通过为相应的 AcroForm 和 XFA 字段设置不同的值来验证这一点。这是结果,左边是 Chrome 的内置 PDF 查看器(不支持 XFA),右边是 Acrobat:
知道 Reader/Acrobat 使用的是 XFA 表单,为什么我们仍然看到空白字段(参见问题 1)?
看起来,当 XFA 字段的值与其对应的 AcroForm 字段的值相同时,Reader/Acrobat 也使用了来自 AcroForm 的一些信息,a.o。它的外观信息。当 XFA 值与 AcroForm 值不同时,AcroForm 字段似乎被完全忽略。
TL;DR 将 NeedAppearances 设置为 true
以解决空白字段。不支持 XFA 的查看器将自动回退到 AcroForm。
(我的测试基于 Adobe Acrobat X。)
我想自动填写双重 AcroForm/XFA PDF 表单。我包含了一个 XFA 数据集包,所有值都显示在 Adobe Reader 中。我将 AcroForms 条目中的 V=
键设置为新值,所有值都显示在替代 PDF 阅读器中。
但是,当我在 Adobe Reader 中使用 XFA 和 AcroForm V=
条目打开 PDF 时,只有当前选定的文本字段的值可见:
我在 PDF specification 中找不到任何提及在存在 AcroForms 和 XFA 时要设置的特殊标志。我假设 XFA
和 Field
键的顺序可能很重要,但事实并非如此。
如何更改 my PDF file 以便在启动时在 Adobe Reader 中可以看到这些值,在仅支持 AcroForms 而不支持 AcroForms 的 PDF 阅读器中可以看到 和 XFA?
有2个问题需要回答:
- 为什么 Adobe Reader 仅在选择字段时显示字段值?
- 如何判断使用的是AcroForm还是XFA?
1。显示字段值
在某些情况下,Adobe Reader/Acrobat 会根据表单域是否被选中以不同方式显示表单域。这对于具有定义的 appearance 的字段来说是典型的,它不同于 Reader/Acrobat 根据其值(可能还有一些外观设置)呈现字段的方式。
未选中该字段时,将显示定义的外观。选择该字段后,会显示 Reader/Acrobat 将如何呈现它的预览。
一些背景:
表单字段由逻辑部分(字段名称、字段值...)组成,称为 字段字典 ,以及可视化部分,称为 小部件注释。小部件注释可以选择包含一个 AP 条目,其中包含定义其可视化的外观流。比照。 PDF 规范,1.7,Table 8.15:
AP - dictionary - An appearance dictionary specifying how the annotation is presented visually on the page.
示例 PDF 中没有 AP 条目,即空白可视化。这是所有字段的显示内容。选择字段时,您会根据字段值看到 Reader/Acrobat 的预览。
您可以通过使用 Reader/Acrobat 手动更改字段值来验证这一点。在这种情况下,将生成并保存一个新的外观。该字段现在将以相同的方式显示,无论它是否被选中。
防止 Reader/Acrobat 中这些 "blank" 字段的两个选项:
为所有表单字段生成外观流。我已经为一个字段完成了此操作(通过使用自动生成外观流的 iText 简单地重新设置它的值)。
结果:
内部 PDF 结构:
将 AcroForm 词典中的 NeedAppearances 条目设置为
true
。比照。 PDF 规范,1.7,Table 8.67:NeedAppearances - boolean - A flag specifying whether to construct appearance streams and appearance dictionaries for all widget annotations in the document
这将触发查看器生成所有外观:
2。 AcroForm 还是 XFA?
通常,支持 XFA 的查看器将显示 XFA 表单。不支持 XFA 的查看器将使用 AcroForm。您可以通过为相应的 AcroForm 和 XFA 字段设置不同的值来验证这一点。这是结果,左边是 Chrome 的内置 PDF 查看器(不支持 XFA),右边是 Acrobat:
知道 Reader/Acrobat 使用的是 XFA 表单,为什么我们仍然看到空白字段(参见问题 1)?
看起来,当 XFA 字段的值与其对应的 AcroForm 字段的值相同时,Reader/Acrobat 也使用了来自 AcroForm 的一些信息,a.o。它的外观信息。当 XFA 值与 AcroForm 值不同时,AcroForm 字段似乎被完全忽略。
TL;DR 将 NeedAppearances 设置为 true
以解决空白字段。不支持 XFA 的查看器将自动回退到 AcroForm。
(我的测试基于 Adobe Acrobat X。)