是否可以使用iText添加XFA字段数据绑定值?

时间:2013-05-20 13:51:41

标签: itextsharp itext

我们不得不使用设计不佳的XFA样式的PDF表单,但我们不是表单的作者(我们需要执行此操作的表单有很多种形式)。该表单具有大多数字段的数据绑定(貌似iText能够为XFA设置字段值所需的内容),但某些字段缺少字段绑定。

  

示例:TextField FirstName绑定到“使用名称(FirstName)”   在Adobe LiveCycle Designer中,它允许iText拾取该字段   在读取XFA数据时,允许保留设定值。该   TextField LastName没有绑定集,但它出现在   用户与FirstName相同。

使用iText或iTextSharp,有没有一种方法可以编程方式查找和更改所有没有数据绑定的XFA TextField,以便使用iText将数据绑定设置为自己(无需进入LiveCycle并手动查找每个)?

1 个答案:

答案 0 :(得分:2)

iText(夏普)通常对XFA做的是提取,插入和替换相关的XML(XDP流)。

因此,您可以使用iText(Sharp)提取代表XFA表单的XML文档,然后处理该XML文档。调整XML文档后,您可以使用iText(夏普)重新插入它。

您必须检查XML以确定OK(例如FirstName)字段和非字段(例如LastName)之间的确切区别。有关字段和数据绑定的信息位于“template”元素中。 “field”元素定义字段。他们有一个“绑定”元素作为孩子,你的某些领域可能会遗漏。 详细信息可在XFA规范中找到:http://partners.adobe.com/public/developer/xml/index_arch.html

使用iText获取XML文档:

PdfReader reader = new PdfReader("xfa form.pdf");
XfaForm xfa = new XfaForm(reader);
Document doc = xfa.getDomDocument();

插入XML文档:

PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("xfa form edit.pdf"));
xfa.setDomDocument(doc);
xfa.setChanged(true);
XfaForm.setXfa(xfa, stamper.getReader(), stamper.getWriter());
stamper.close();
reader.close();