2010-03-30 54 views
1

下面的代码(使用iText库):符号 '#' 在XML属性名称produses抛出:DOMException

PdfStamper stamp = new PdfStamper(reader, outputStream); 
AcroFields form = stamp.getAcroFields(); 
String name = "form1[0].#subform[0].Table1[0].#subformSet[0].Row[2].#field[0]"; 
form.setField(name, ""); 

产生以下错误:

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:2571) 
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:2084) 
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) 

显然这是因为 '#' 号在字段名称中。此字段的名称来自AcroFields.getFields()集合,看起来很奇怪,设置此值会产生错误。

有没有处理这个错误而不改变真实域名的方法?

回答

0

更具体:

String name = "form1[0].#subform[0].Table1[0].#subformSet[0].Row[2].#field[0]"; 
form.setField(name.replace("#", "&#23;"), "");