2013-12-18 61 views
6

我发现了几个示例,演示了如何使用iText XML文档将XML转换为PDF。但它们都是旧版本4.x.是否有任何示例,或者有人可以发布必需/更新代码的示例在版本5.x中执行相同操作?使用最新版本将iText XML转换为PDF

所有的例子参考这样的代码,但我找不到用什么来替换新版本中的ITextHandler类。
http://www.ridgway.co.za/archive/2005/07/31/itextsharpxmltopdfexample.aspx

Document document = new Document(); 
PdfWriter.GetInstance(document, new FileStream("ExampleDoc.pdf", FileMode.Create)); 
ITextHandler xmlHandler = new ITextHandler(document); 
xmlHandler.Parse("ExampleDoc.xml"); 

而且,我不试图去从HTML到PDF。 CSS样式永远不会按预期出现。

编辑碰撞,真的需要一些帮助。任何人都?

+0

你想处理这个XML有多复杂? –

+0

在这一点上,我愿意为它构建它。目前还没有XML,因为我无法获得样本。我所要做的就是建立一个简单的发票模板。 –

+0

为什么不将它转换为HTML?如果您真的热衷于不将其转换为HTML,则可以始终扩展XMLWorker并编写自己的解析器。 –

回答

3

很久以前,iText使用专有语法处理XML文件已被删除。请参阅作者的直接答案thisthis。相反,鼓励您使用全球公认的XML标准,其中 XHTML。

我知道你说你不想使用HTML,因为它永远不会正确显示,但也许你可以发布一些你正在尝试的样本,我们可以提供帮助。另外,请确保您使用的是XMLWorker而不是HTMLWorker。使用它时请参阅这些链接获取更多帮助/信息。

编辑

此编辑是在回答@ JohnC的评论

我不能说iText团队和他们的理由,但我可以猜测事情。 PDF没有“段落”,“文字”,“表格”等。相反,PDF文本,图画(线条,图案)和图像。如果您想手动执行这些操作,您可以使用原始的PdfContentByte对象。但是,鼓励您使用iText的抽象代码,如ParagraphPdfPTable,代表您使用PdfContentByte

为了iText支持XML格式,它需要首先创建自己的专有DTD和/或XML模式。如果添加了任何功能,则需要正确地对架构进行版本化,这可能会导致消费者出现问题和混淆。然后,它需要构建/维护一个解析器,将XML抽象转换为iText抽象或原始PDF命令。对于前者,你可以抽象抽象,只是在乞求突破。对于后者,您现在有两个抽象实现,最终会遇到功能奇偶校验问题。

此外,XML代表什么?段落,文字,图像和表格块?听起来像HTML,所以没有必要重复这种模式。或者它会“把Z放在坐标X,Y使用字体ABC”?这就是PdfContentByte进来的地方。没错,可能有一个本地语法分析器,但我猜那里没有太多的人要求一个。或者,根据您自己的数据,XML将成为您自己的格式,例如<book><inventory>?如果是这样的话,那么iText真的不知道如何设计风格。但是,您可以使用.Net/Java和XSLT杠杆来将您的XML转换为它所知道的XHTML命令。

+0

这个第一个链接只是说他删除了对DTD的支持,但是不清楚它是否在对整个XML到PDF功能的说明中。构建一个iText XML模板似乎更容易,该模板具有确切的方向来告诉PDF所处的位置,而不是XHTML以及对有限CSS的理解。 –

+0

@JohnC,我回答如上。我不会为iText团队发言,所以这只是我个人的看法。我并不是说XML表示会很糟糕,事实上我自己也是这样做的。然而,iText团队必须分辨要做什么,我不认为很多人都在问这个问题。如果您可以向他们展示特定用例,他们可能会回应建议,或者可能会将其添加为未来版本的功能。 –

+0

那么从我看到的iText XML是旧版本,就是这样,把内容Z在坐标X,Y与字体ABC。我的问题与xhtml不是xhtml部分,如果它按预期工作,那么它会很棒。它的CSS翻译器没有按预期翻译的问题。使用PdfContentByte或iText的抽象如Paragraph和PdfPTable,是否有任何“良好”的代码构建PDF示例? –