【问题标题】:iText parser exception for XML -> PDF conversionXML 的 iText 解析器异常 -> PDF 转换
【发布时间】:2015-04-30 01:11:34
【问题描述】:

我有一个使用 XML 填充的基本 .vm 文件,然后使用 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>

失败并出现异常“无法将'iTextSharp.text.Paragraph'类型的对象转换为'iTextSharp.text.Table'类型。”

有什么想法吗?当然我看不到任何格式问题。

【问题讨论】:

    标签: pdf pdf-generation itextsharp


    【解决方案1】:

    首先,如果您使用 iText DTD 将 XML 转换为 PDF,那么您使用的是 2008/2009 年以来非常古老且过时的 4.x 系列 iTextSharp。该版本有许多 5.x 系列修复的错误。如果您因为许可证而使用该版本,我鼓励您(和您的法律代表)阅读iText Sales FAQ 页面标题上的第四块为什么我不应该使用 iText 2.x(或 iTextSharp 4.x)。 x)?.

    第二个,但与第一个相关,有一种将 XML 转换为 PDF 的现代方法。阅读through this answer,它更详细地介绍了 iText 的作者本人提供的链接,解释了为什么你不应该再使用 DTD。

    最后,如果您仍然要使用 DTD 方法,有人说您可以在关闭 &lt;/paragraph&gt; 和打开 &lt;table&gt; 标记之间放置一个 &lt;ignore/&gt; 标签,这将使 iText 的解析器跳过空白是一个已知问题。 This post 还谈到了一种使用 XmlTextReader 解析 XML 的方法。最后,您可以尝试删除 XML 标记之间的所有空格,看看是否可以解决问题。

    【讨论】:

      猜你喜欢
      • 2016-12-30
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-02
      相关资源
      最近更新 更多