XML 的 iText 解析器异常 -> PDF 转换
iText parser exception for XML -> PDF conversion
我有一个基本的 .vm 文件,用 XML 填充,然后使用 iText 将其转换为 PDF 文档:
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE itext SYSTEM "http://itext.sourceforge.net/itext.dtd">-->
<itext creationdate='${System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")}' producer="X">
<paragraph align="Default" size="18.0" style="bold" indentationleft="0.0">
Test
</paragraph>
</itext>
上面的解析绝对没问题。但是稍微复杂一些:
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE itext SYSTEM "http://itext.sourceforge.net/itext.dtd">-->
<itext creationdate='${System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")}' producer="X">
<paragraph align="Default" size="18.0" style="bold" indentationleft="0.0">
Test
</paragraph>
<table>
<row>
<cell>
<paragraph>
Table test
</paragraph>
</cell>
</row>
</table>
</itext>
异常失败 "Unable to cast object of type 'iTextSharp.text.Paragraph' to type 'iTextSharp.text.Table'."
有什么想法吗?当然我看不出有任何格式问题。
首先,如果您使用 iText DTD XML 将 PDF 转换为 PDF,那么您使用的是 2008/2009 年非常古老且过时的 4.x 系列 iTextSharp。该版本有许多 5.x 系列修复的错误。如果您因为许可而使用该版本,我鼓励您(和您的法定代表)阅读 iText Sales FAQ 页面标题的第四部分 我为什么不使用 iText 2.x(或 iTextSharp 4.x)?.
其次,但与第一个相关的是,有一种现代方法可以将 XML 转换为 PDF。阅读 through this answer,其中有更多细节,并有来自 iText 作者的链接,他自己解释了为什么你不应该再使用 DTD。
最后,如果您仍然要使用 DTD 方法,有人说您可以在结束 </paragraph>
和开始 <table>
标签之间放置一个 <ignore/>
标签,这样iText 的解析器会跳过已知问题的空白。 This post 还谈到了一种使用 XmlTextReader
来解析 XML 的方法。最后,您可以尝试删除 XML 标签之间的所有空格,看看是否能解决问题。
我有一个基本的 .vm 文件,用 XML 填充,然后使用 iText 将其转换为 PDF 文档:
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE itext SYSTEM "http://itext.sourceforge.net/itext.dtd">-->
<itext creationdate='${System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")}' producer="X">
<paragraph align="Default" size="18.0" style="bold" indentationleft="0.0">
Test
</paragraph>
</itext>
上面的解析绝对没问题。但是稍微复杂一些:
<?xml version="1.0" encoding="UTF-8"?>
<!--<!DOCTYPE itext SYSTEM "http://itext.sourceforge.net/itext.dtd">-->
<itext creationdate='${System.DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss")}' producer="X">
<paragraph align="Default" size="18.0" style="bold" indentationleft="0.0">
Test
</paragraph>
<table>
<row>
<cell>
<paragraph>
Table test
</paragraph>
</cell>
</row>
</table>
</itext>
异常失败 "Unable to cast object of type 'iTextSharp.text.Paragraph' to type 'iTextSharp.text.Table'."
有什么想法吗?当然我看不出有任何格式问题。
首先,如果您使用 iText DTD XML 将 PDF 转换为 PDF,那么您使用的是 2008/2009 年非常古老且过时的 4.x 系列 iTextSharp。该版本有许多 5.x 系列修复的错误。如果您因为许可而使用该版本,我鼓励您(和您的法定代表)阅读 iText Sales FAQ 页面标题的第四部分 我为什么不使用 iText 2.x(或 iTextSharp 4.x)?.
其次,但与第一个相关的是,有一种现代方法可以将 XML 转换为 PDF。阅读 through this answer,其中有更多细节,并有来自 iText 作者的链接,他自己解释了为什么你不应该再使用 DTD。
最后,如果您仍然要使用 DTD 方法,有人说您可以在结束 </paragraph>
和开始 <table>
标签之间放置一个 <ignore/>
标签,这样iText 的解析器会跳过已知问题的空白。 This post 还谈到了一种使用 XmlTextReader
来解析 XML 的方法。最后,您可以尝试删除 XML 标签之间的所有空格,看看是否能解决问题。