2013-12-18 88 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示例? –