PDF 表单填写 iText 错误

Posted

技术标签:

【中文标题】PDF 表单填写 iText 错误【英文标题】:PDF form fill with iText error 【发布时间】:2012-11-19 09:29:15 【问题描述】:

我有一个 PDF 文件,其中包含一些需要用 Java 代码填写的表单域。我为此使用 iText 2.1.7 库,以及此代码:

PdfReader reader = new PdfReader("C:\\Users\\igor\\Desktop\\test.pdf");
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream("testout.pdf"), '\0', true);
AcroFields fields = stamper.getAcroFields();
fields.setField("txtFirstName", "Milan");
stamper.close();

我收到此错误消息:

org.w3c.dom.DOMException: INVALID_CHARACTER_ERR: An invalid or illegal XML character is specified. 
at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.checkQName(CoreDocumentImpl.java:2582)
at com.sun.org.apache.xerces.internal.dom.ElementNSImpl.setName(ElementNSImpl.java:117)
at com.sun.org.apache.xerces.internal.dom.ElementNSImpl.<init>(ElementNSImpl.java:80)
at com.sun.org.apache.xerces.internal.dom.CoreDocumentImpl.createElementNS(CoreDocumentImpl.java:2095)
at com.lowagie.text.pdf.XfaForm$Xml2SomDatasets.insertNode(Unknown Source)
at com.lowagie.text.pdf.AcroFields.setField(Unknown Source)
at com.lowagie.text.pdf.AcroFields.setField(Unknown Source)
at proba.main(proba.java:21)

PDF不是我创建的,所以我不知道文件使用什么类型的表格(如果我理解正确的话,有FDF和XFA表格)。由于 PDF 不是我创建的,我使用此工具 http://support.persits.com/pdf/demo_formfields.asp 查找表单字段的名称,它给了我这个:

applicationPrepaid[0].#pageSet[0].Pagina1[0].txtFirstName[0]

Pdftk 工具只给了我txtFirstName 作为字段名称。我尝试了全名和txtFirstName,但它不起作用。帮忙?

【问题讨论】:

能否也提供 PDF 供检查?此外,您是否也尝试过使用当前的 iText 版本(即 5.3.x 版本)?当您使用旧的 iText 版本时,这始终应该是您的第一个测试。如果它在那里工作,很可能它要么是库中的错误同时修复,要么是 PDF 中的异常,同时库已被强化。 我无法提供 PDF :( 公司机密。我将尝试当前版本的 iText 只是为了查看问题是否在库中,但由于 AGPL 我无法使用它许可证。 即使使用当前版本的 iText,问题仍然存在。我一定是做错了什么…… 除非其他人认识到该问题并发布解决方案,否则您应该尝试创建一个示例 PDF,您可以提供给公众,该示例也展示了该行为。否则人们将很难提供帮助。 【参考方案1】:

问题似乎在于您使用的是基本页面这一事实。 名称“#pageSet[0”是导致错误的原因。我认为是“磅”(#) 号导致错误。

【讨论】:

以上是关于PDF 表单填写 iText 错误的主要内容,如果未能解决你的问题,请参考以下文章

PDF 表单与 itext 合并。 C#

合并表单后,iText字段将无法计算

如何使用 iText 获取 Pdf 表单字段的自定义格式脚本?

iText:如何在提交 Pdf 表单后重定向到 url,当它显示在 iframe 中时?

如何使用 iText7 检测 PDF 中的 fontawesome 图标

pdf格式在itext7中为空