从 LiveCycle 11 填写 XFA 表单,其中有一个空 xfa:datasets 且没有 dd:DataDescription 节点

Fill XFA form from LiveCycle 11 which has an empty xfa:datasets and no dd:DataDescription node

我有一个pdf。 xfa:datasets 节点如下所示:

<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/"><xfa:data xfa:dataNode="dataGroup" /></xfa:datasets>

因此我无法提取有关底层模式的任何信息,所以我无法生成 xml 来填充它。

pdf 使用 javascript 以下列方式向表中添加行:

this.resolveNode('document_table.Table3._user_input').addInstance(1);

Xfa.TemplateSom 中使用 iTextSharp,我可以找到对表单元素的引用。在 DomDocument 中,我可以搜索并找到 xml 中的各种元素,但这就是我卡住的地方。好像和XFA数据没有关系,我试了XFA Worker demo,demo确认pdf没有XFA数据。

如果不是 XFA 也不是 AcroFields,我不确定这是什么类型的表单。

布鲁诺,我买了你的书,虽然我没有从头到尾读完,但据我所知,它没有涵盖这种情况。任何人对如何填写此类表格有任何见解,我将不胜感激。

现在,我想知道是否必须附加 javascript 来模仿动作并设置数据。由于有许多表单,每个表单都有不同的布局,手动解析所有表单以获取层次结构并自己复制 javascript 是繁重的,坦率地说,我不确定这种方法是否会成功。

表格是XFA表格,少了DataDescription有点可惜,但不是异常。数据的描述是可选的,不是强制性的。

如果您打算用 iText 填充表单,那么您应该忘记 JavaScript 添加行。您不应将手动数据输入(用户逐行输入数据,手动添加行)与自动数据输入(您以 XML 文件的形式提供数据)混淆。如果您有一个包含行的 table,那么这些行将填充与源 XML.

中的数据行一样多的行

真正的问题是:如果没有数据描述,XML你怎么写?

  • 有一个理想的方法:您向创建表单的人询问数据的架构。他或她在创建表单时提供了数据源,因此他或她知道应该如何在 XML 中组织数据。不幸的是,您并不总是可以访问创建表单的人。
  • 困难的方法是: 检查 XFA XML,然后查看模板中的数据绑定。如果给我这个任务,我会需要 XFA 规范;如果有人即兴问我,我不知道从哪里开始。
  • 有一个实用的方法:这是我一直使用的解决方法。我在 Adob​​e Acrobat 中手动填写表格。我填写所有可能的字段,然后保存填写的表格。然后我提取数据 XML。我使用该数据 XML 创建一个 XSD (有相应的工具)。这为我提供了 XFA 表单所期望的数据描述的近似值。显然,这个 XSD 并不完美,因为它可能无法捕捉到添加到表单中的所有规则和限制,但在我遇到的大多数情况下,这已经足够了(当它还不够时) , 对 XSD 的一些小调整就成功了)。

一旦您知道 XML 的预期结构,您就不必担心 JavaScript。用于处理用户操作的 JavaScript 在自动填写表单的上下文中是无关紧要的。在使用 iText 填写 XFA 表单的上下文中,唯一重要的 JavaScript 是 JavaScript 自动格式化数据(例如格式化日期、货币等)。