2012-11-19 70 views
1

填補我有我需要從Java代碼填寫一些表格字段的PDF文件。我使用的iText 2.1.7庫這個,還有這個代碼:PDF形式iText的錯誤

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,它不起作用。幫幫我?

+0

是否也能提供檢查的PDF?此外,您是否也嘗試過使用當前的iText版本(即5.3.x版本)?當你使用舊的iText版本時,這應該是你的第一次測試。如果它在那裏工作,它可能是圖書館中的一個bug,或者是PDF庫中的一個異常,同時它已經被強化。 – mkl

+0

我不能提供PDF :(公司的祕密。我會盡量iText的當前版本只是爲了看看問題是否在庫中,但我不能使用它,因爲AGPL許可證。 – stojke

+0

問題仍然存在,即使iText的當前版本。我必須做一些錯誤的... – stojke

回答

1

的問題似乎在於你用基本的網頁工作的事實。 名稱'#pageSet [0'是導致錯誤的名稱。我認爲這是導致錯誤的'英鎊'(#)符號。