2012-07-19 136 views
0

我正在使用com.lowagie.text.xml.SAXiTextHandler使用iText(v-2.1.7)将XML转换为PDF。虽然我可以看到我正确使用标签,但我得到了下面的错误。验证XML形成的是有效的,我可以在浏览器中看到它没有错误。尝试执行parser.parse(....)时代码失败。我检查了我写标签的方式,对我来说看起来很好。我基本上添加了表格标签,其中包含inturn包含单元格标签的行标签。 单元格标签内部有一个单独的段落标签(或),有时段落内有一个段落和一个块标签。有什么办法可以解决这个问题吗?PDF IText | ClassCastException - com.lowagie.text.Paragraph不能转换为com.lowagie.text.Table

*删除XML中的所有段落标签并再次尝试。它返回相同的错误 - 在这里使用了新的XML - http://pastebin.com/hmyPcGDw *

*即使这样简单的XML文件现在产生相同的异常 - http://pastebin.com/89U9vybt *

对我来说,它看起来像一个问题com.lowagie.text.xml.SAXiTextHandler。任何帮助?

java.lang.ClassCastException: com.lowagie.text.Paragraph cannot be cast to com.lowagie.text.Table 
     at com.lowagie.text.xml.SAXiTextHandler.handleEndingTags(Unknown Source) 
     at com.lowagie.text.xml.SAXiTextHandler.endElement(Unknown Source) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:606) 
     at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endNamespaceScope(XMLDTDValidator.java:2054) 
     at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2005) 
     at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:879) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1741) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2898) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607) 
     at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764) 
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl.parse(SAXParserImpl.java:302) 
     at javax.xml.parsers.SAXParser.parse(SAXParser.java:195) 
+0

你可以发布你的XML吗? – mabbas 2012-07-19 10:25:57

+0

这里是XML - http://pastebin.com/qJsDkj4G – 2012-07-19 11:12:30

回答

1

那是因为你之前,你的XML标记(更准确地说是空格的<table>标签后)有一些白色的空间。我试着用你的例子,我有同样的例外。我把你的xml代码复制/粘贴到eclipse(或记事本++)中,我将它格式化(删除所有不需要的空白区域),然后我再次尝试,问题解决了! pdf很好地生成!

+0

感谢您的指针。好吧,我尝试了简单的,它也适用于我。我现在面临的问题是使用2000+行XML.I,从

标记到
标记的空格被删除,并将其删除。我仍然收到错误。我应该在开始标记和结束标记之后没有任何空格(标签/空格)吗?您能否让我知道这里的指导原则以及如何轻松删除不需要的空白? – 2012-07-19 18:40:14

+1

'

'标签后面不应有空格('com.lowagie.text.xml.SAXiTextHandler'中存在一个错误)。要删除空格,你可以在'eclipse'中复制/粘贴你的xml代码,然后'ctrl + a'来选择所有的代码,然后'ctrl + shift + f'来格式化它。或者如果您使用的是记事本++,安装“XML工具”插件(菜单插件,插件管理器),然后运行:菜单插件,Xml工具,漂亮打印(仅限XML - 带换行符)。 – mabbas2012-07-19 19:22:09