当前位置: 首页 > 知识库问答 >
问题:

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

袁运锋
2023-03-14

我们必须使用设计糟糕的XFA样式的PDF表单,但我们不是表单的作者(有许多表单需要这样做)。表单对大多数字段都有数据绑定(似乎是iText能够为XFA设置字段值所需的),但有些字段缺少字段绑定。

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

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

共有1个答案

越新霁
2023-03-14

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

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

您必须检查XML,以确定正常字段(例如FirstName)和不正常字段(例如LastName)之间的区别。有关字段和数据绑定的信息位于“template”元素中。“field”元素定义字段。它们有一个作为子元素的“bind”元素,您的一些字段可能缺少该元素。有关详细信息,请参见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();
 类似资料:
  • 问题内容: 我有一个正在创建的字符串,并且需要向该字符串添加多个“ \ 0”(空)字符。在每个空字符之间是其他文本数据(仅ASCII字母数字字符)。 我的问题是,在J2SE中,当您添加第一个null(\ 0)时,java似乎确定它是一个字符串终止符(类似于C ++),并且忽略了所有附加的数据。不引发错误,尾随的数据将被忽略。我需要在字符串中的null后强制添加其他尾随数据。我必须对我支持的旧数据库

  • 在Adobe Acrobat中,可以将“打开Web链接操作”添加到acroform。是否可以使用iText使用现有的acroform来执行此操作? 我在iText文档中找不到关于它的任何提及,因此尝试通过编程方式创建新acrofield并将此操作添加到其中,但没有成功。这是我的代码: 生成的PDF文档没有显示合作伙伴字段。请向我指出一些文档或错误的代码。

  • 在SpringMVC表单中,我面临着将禁用的文本框绑定到模型对象的问题。问题是,即使最初填充了表单,在提交表单后,禁用框的内容也会在下一次页面刷新时丢失,因为禁用的字段不会提交。 然而,我通过添加一个绑定到同一属性的隐藏字段来解决这个问题。现在,我的禁用文本框即使在提交后仍保留其内容。如果我需要始终在禁用框中显示属性值,这是正确的方法吗?

  • 问题内容: 我对 Angularjs数据绑定 功能有疑问。 如果我写: 而且我在 controller.js中 是这样的: 结果将是“你好布鲁诺!” …这太棒了!现在,我编辑了模板: 而且我还在关闭主体之前添加了此javascript函数: 所以我的问题是: 在AngularJS中是否可以在经典javascript函数中使用数据绑定? 更新: 这样就解决了错误…但是仍然没有出现名称…我仍在努力中…

  • 我需要将预填充的PDF/XFA表单设置为只读(因为在没有输入的情况下,例如文本、复选框、单选按钮等可以更改其值)。 对于常规AcroForms PDF和静态XFA表单,我可以通过在PdfStamper实例上调用setFormFlatting(true)来实现这一点。对于动态XFA表单,我必须将XDP的“字段”节点的“访问”属性设置为“只读”。 问题是,如何检测表单是否是动态XFA?不区分静态或动态

  • 我想创建一个包含XFA数据的PDF,但我不想在查看PDF时看到XFA数据,但是,我希望可以通过以下代码访问它: 我怎么能这样呢? 谢谢