我有一个基本的.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;
有什么想法吗?当然,我无法看到任何格式问题。
答案 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标记之间的所有空格,看看是否能解决问题。