我有一个本地PDF表单,其中包含一个永不改变的特定模板。我已经将表单标识为XFA(xml)动态表单,因为没有返回任何键集。 我正在尝试使用itext来填充包含在.txt文件中的数据的表单。根据我的理解,我需要以某种方式从文本文件中获取数据并将其正确放入.xml文件中。 file,以便itext可以使用给定的xml来操作原始PDF。
表单以下列布局为例:
我在Eclipse中使用的示例代码成功编译/运行,但它需要文件170
中的数据,以便用字段数据填充空表单并输出填充版本。问题是,对于我的实际项目,我没有要使用的data.xml文件来正确填充表单。原始字段数据位于.txt文件中,每行包含PDF中不同字段的数据。
示例:引用上面的图片,我的.txt文件对于包含标有“四个”字段的字段如下所示:
我对两件事感到困惑:
1。如何提取原始PDF的xml结构,以便我知道 使用.txt文件中的数据填充时要遵循的格式吗?
2. 如何从文本文件中获取值并将其正确插入.xml结构?
以下代码有效,但需要data.xml
才能填写“incomplete.pdf”。它使用代码data.xml
来输入数据,但我仍然坚持如何识别“XML”的结构以及如何填充它。
非常感谢任何帮助,非常感谢。
代码:
xfa.fillXfaForm(new FileInputStream(XML));
答案 0 :(得分:0)
在XFA中,表单字段和表单数据之间的链接使用称为数据绑定的概念。 Fields可以具有类似XPath的表达式,以从XML数据结构中选择它们的值。这意味着需要对XML数据进行适当的结构化以适用于特定的XFA表单,但这种结构不一定是唯一的。
一个简单的例子: 假设您有一个只有1个文本字段的XFA表单。此文本字段具有绑定到任何具有标记名称“名称”的XML元素的数据。在这种情况下,data.xml可以简单地为:
<Name>Hurmle</Name>
但是,这个以及无数种不同的XML结构也可以起作用:
<StackOverflow>
<accounts>
<account>
<Name>Hurmle</Name>
</account>
</accounts>
</StackOverflow>
代码示例中的readXfa
方法将用于从XFA表单中提取完整的XML流。它由不同的部分组成。最相关的是:
确定哪种XML结构可行的一种方法是查看所有字段的数据绑定(cf template )。因此,您将知道字段期望获取其数据的位置。对于一个非平凡的形式,这可能是复杂的和/或很多工作。
如果在XFA表单中可用,您可以使用 dataDescription 。它将为您提供数据和信息的结构,例如元素的最小和最大出现次数。
最后,您可以查看表单中已有的数据(参见 xfa:data )。请记住,此XML结构不一定完整:可以省略空元素。例如,如果表单有2个字段,则可以将值指定为:
<SomeRoot>
<Field1>Value1</Field1>
<Field2></Field2>
</SomeRoot>
但是:
<SomeRoot>
<Field1>Value1</Field1>
</SomeRoot>
第一种情况将更容易找出所需的结构。 如果 xfa:data 缺失或不完整,您可以尝试使用支持XFA的PDF查看器手动填写所有表单字段。保存时,查看器将根据数据描述和数据绑定填充 xfa:data 。