【问题标题】:PDF IText | ClassCastException - com.lowagie.text.Paragraph cannot be cast to com.lowagie.text.TablePDF 文本 | ClassCastException - com.lowagie.text.Paragraph 无法转换为 com.lowagie.text.Table
【发布时间】:2012-07-19 09:57:13
【问题描述】:

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

* 从 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)

【问题讨论】:

标签: java pdf-generation itext


【解决方案1】:

那是因为您的 xml 标记前后有一些空格(更准确地说是<table> 标记之后的空格)。我试过你的例子,我有同样的例外。我将您的xml代码复制/粘贴到eclipse(或notepad ++)中,并对其进行了格式化(删除了所有不需要的空白),然后我再次尝试并解决了问题! pdf生成得很好!

【讨论】:

  • 感谢您的指点。好吧,我在简单的那些上试过了,它也对我有用。我现在面临的问题是 2000 多行 XML。我从 标记到
    标记中寻找空格并将它们删除。我仍然收到错误消息。我应该在开始标签和结束标签之后没有任何空格(制表符/空格)吗?您能否让我知道这里的指南以及如何轻松删除不需要的空格?
  • <table> 标记后不应有空格(com.lowagie.text.xml.SAXiTextHandler 中有一个错误)。要删除空格,您可以在 eclipse 中复制/粘贴您的 xml 代码,然后在 ctrl + a 中选择所有代码,然后在 ctrl + shift + f 中进行格式化。或者,如果您使用的是 notepad++,请安装“XML 工具”插件(菜单插件、插件管理器)然后运行:菜单插件、Xml 工具、Pretty Print(仅限 XML - 带换行符)。
猜你喜欢
  • 2020-10-04
  • 2012-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多