2012-05-02 94 views
5

我很好奇,如果任何人有爲Java中生成的PDF編寫JUnits的經驗(特別是iText)。我在Google上進行了一次快速搜索,但找不到任何具體內容。 到目前爲止,我所能做的是檢查PDF是否已經生成,有一定數量的頁面並且文檔已關閉。但我無法驗證文檔的內容。有人可以提供他們過去爲了達到這樣的結果而做的一個例子嗎?還是我完全錯了,我的PDF的JUnits是矯枉過正? 謝謝爲iText生成的PDF編寫JUnits

+0

您可以重新閱讀PDF(使用iText的[com.itextpdf.text.pdf.parser.PdfTextExtractor](http://api.itextpdf.com/itext/com/itextpdf/text/pdf/parser/ PdfTextExtractor.html)或者[com.itextpdf.text.pdf.PdfReader](http://api.itextpdf.com/itext/com/itextpdf/text/pdf/PdfReader.html)),然後驗證內容。 – wchargin

+0

比較PDF的一種簡單方法是將它們渲染爲位圖並比較這些位圖 - 這就是o.k.只要您對PDF的外觀感興趣並且不關心元數據等。 –

回答

2

鑑於您使用的是Java,我會查看PDFBox(Apache)。你所要求的是非常具有挑戰性的,因爲你的重新編制的PDF在語法上可能與你的原始文件不相同。你可能需要考慮往返。

PDF等文檔在比較方面可能比較脆弱。如果發現比較失敗,它可能幾乎沒有指示失敗的位置。 PDF文檔可能非常複雜(高度分支的樹)。您可能需要查找文檔的標準化來比較它們(我爲XML文檔執行此操作)。

我的猜測是,一個完整的測試是矯枉過正,並且您的當前測試儘可能以合理的成本儘可能好。

更新: 我檢查了PDFBox for PDDocument.equals(PDDocument)並且沒有深度等於方法。這表明他們沒有發現它是值得的(它需要在許多子節點上進行遞歸)。也有很多實際的數字,所以這些都必須與容差進行比較。

位圖方法可能適用於人類,但對實數問題非常敏感 - 舍入錯誤會在不同的像素中寫入一點。它幾乎可以肯定與新的操作系統版本有所不同。