1

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

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

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

4

1 回答 1

2

iText(Sharp) 通常对 XFA 所做的是提取、插入和替换相关的 XML(XDP 流)。

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

您必须检查 XML 以确定正确的字段(例如 FirstName)和不正确的字段(例如 LastName)之间的确切差异。有关字段和数据绑定的信息位于“模板”元素中。“字段”元素定义字段。它们作为子元素有一个“绑定”元素,您的某些字段可能缺少该元素。详细信息可以在 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();
于 2013-05-23T23:20:53.103 回答