java - PDF 文本 | ClassCastException - com.lowagie.text.Paragraph 无法转换为 com.lowagie.text.Table

标签 java pdf-generation itext

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

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

最佳答案

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

关于java - PDF 文本 | ClassCastException - com.lowagie.text.Paragraph 无法转换为 com.lowagie.text.Table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11558303/

相关文章:

java - 设计更好的 API?

java - 如何根据嵌入的属性进行排序并通过规范限制结果的数量?

java - Android/Java : use method from prior SDK, 在当前 SDK 中未定义

fonts - 在 pandoc 中设置字体以使用 MiKTeX 生成 pdf

php - FPDF 将带有背景颜色的文本添加到 x/y 坐标

java - 如何同时进行pdf书写和复印?

java - Spring 启动外部配置

c# - itextsharp 在表格单元格中的圆形图像上添加文本

java - 确定 PDF 页面是包含文本还是纯图片

c# - iTextSharp - 关闭 pdf 时出现 "Do you want to save"提示