从 LiveCycle 11 填写 XFA 表单,该表单有一个空的 xfa:datasets 和没有 dd:DataDe



我有一个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工作者演示,演示确认pdf没有XFA数据。

我不确定这是什么类型的形式,如果它不是XFA也不是AcroFields。

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

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

形式是XFA形式,DataDescription缺失的事实很可惜,但并不异常。数据描述是可选的,不是强制性的。

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

真正的问题是:如果没有数据描述,如何编写该 XML?

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

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

最新更新