2014-05-02 46 views
4

我們使用iText來讀取輸入PDF,然後添加消息並保存輸出。使用iText爲生成的PDF創建單元測試

PdfReader reader = new PdfReader(inputFilepath); 
PdfStamper stamper = new PdfStamper(reader, new FileOutputStream(outputFilename, true)); 
PdfContentByte over = stamper.getOverContent(1); 
over.beginText(); 
over.showTextAligned(align, text, x, y, angle); 
... 
over.endText(); 
stamper.close(); 

是否有閱讀在單元測試中生成的PDF,然後檢查所提供的文本存在於正確的x,y座標的方法嗎?

+1

您可以使用任何PDF庫,允許您在單元測試中使用位置進行文本提取。 iText本身有一個文本提取框架,可以很容易地進行調整,不僅可以返回文本,還可以返回其位置。如果您不想使用相同的庫來測試最初創建它們的結果,其他庫也會這樣做。 – mkl

+0

謝謝 - 我很愚蠢地搜索'使用iText進行單元測試'而不是'從PDF中提取文本'現在已經找到了很多答案。謝謝你的幫助。 – pbforster

回答

-1

作爲一種快捷方式,您可以使用PdfReader.getPageContent(int pageNumber)測試特定頁面中PDF文本的順序。

這並不理想,但它可以是一個窮人的定位測試,假設您從左到右和從上到下打印文本。

+0

所有正在添加的文本都使用X,Y座標,並且我無法保證它的打印順序。我結束了使用一個'com.itextpdf.text.pdf.parser.SimpleTextExtractionStrategy'拉出所有添加的文本,然後測試,看看我添加的每個字符串是否存在。不理想,但至少要測試所有消息是否存在。 – pbforster

2

一般來說,don't test the platform(或者,在這種情況下,您正在使用的是第三方庫)。相反,請測試您是否正確地與其交互。

在這種情況下,這意味着假設showTextAligned()會做正確的事情,只要傳入正確的座標。然後我會專注於測試。

這可能意味着我需要隱藏與接口後面的PDF類的所有交互,並且我會將該接口的模擬傳遞給計算代碼,使用它來驗證正確的值通過給定的樣本輸入。