XML的iText解析器异常 - > PDF转换

时间:2015-02-27 10:42:18

标签: pdf pdf-generation itextsharp

我有一个基本的.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>

异常失败&#34;无法转换类型为&#39; iTextSharp.text.Paragraph&#39;输入&#39; iTextSharp.text.Table&#39;。&#34;

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

1 个答案:

答案 0 :(得分:1)

首先,如果您使用iText DTD进行XML到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方法,有人会说您可以在结束<ignore/>和打开</paragraph>标记之间放置<table>标记,这将是iText的标记解析器跳过已知问题的空白。 This post还讨论了使用XmlTextReader解析XML的方法。最后,您可以尝试删除XML标记之间的所有空格,看看是否能解决问题。