批量比较两个PDF文档(PDFUtil,通过文本或者图像进行比较)第一篇
之前寫過一些關于PDF的文章:
- Python圖片裁剪的兩種方式——Pillow和OpenCV
- Java+PDFBox將PDF轉成圖片
- 【PyMuPDF和pdf2image】Python將PDF轉成圖片
在我的項目中,我需要比較大量的PDF文檔,確認兩份PDF文檔是否一致,如果僅僅憑借著手動去逐一比較,可能很快就陣亡了。另外也有一些軟件可以輔助的去對比,但依然是手動。
在找不到任何比較好用的工具來比較PDF文檔的前提下,而且不希望只是進行簡單的文本進行比較,而是想要尋找一些基于圖像對PDF進行比較,找到之間的像素差異的方法。
所以我創建了一個簡單的Java庫(基于apache-pdf-box – Apache License, Version 2.0),可以通過文本/圖像(Text/Image)模式比較指定的PDF文檔,并且高亮差異;從PDF文檔中提取圖像,并將圖像另存為。
Maven 依賴:
使用時應該包含下面的POM依賴項:
ZIP下載地址:
taguru-pdf-utility-v1.1.zip (17288 downloads)
Github:
想要獲取源碼包請點擊這里
使用說明:
1、獲取PDF頁數
import com.testautomationguru.utility.PDFUtil;PDFUtil pdfUtil = new PDFUtil(); pdfUtil.getPageCount("c:/sample.pdf"); //返回PDF的頁數2、以純文本的方式獲取頁面內容
//以Text返回PDF的內容 - 所有頁 pdfUtil.getText("c:/sample.pdf"); // 以Text返回PDF第2頁的內容 pdfUtil.getText("c:/sample.pdf",2); // 以Text返回PDF第5~8頁的內容 pdfUtil.getText("c:/sample.pdf", 5, 8);3、從PDF中提取附加圖像
//設置我們需要存儲圖像的路徑 pdfUtil.setImageDestinationPath("c:/imgpath"); pdfUtil.extractImages("c:/sample.pdf");// 從PDF的第3頁中提取并保存內容 pdfUtil.extractImages("c:/sample.pdf", 3);// 從PDF的第2頁中提取并保存內容 pdfUtil.extractImages("c:/sample.pdf", 2, 2);4、將PDF頁面存儲為圖像
//設置我們需要存儲圖像的路徑pdfUtil.setImageDestinationPath("c:/imgpath");pdfUtil.savePdfAsImage("c:/sample.pdf");5、以文本模式比較PDF文件(速度更快-但不比較PDF中的格式、圖像等)
String file1="c:/files/doc1.pdf"; String file1="c:/files/doc2.pdf";// 比較PDF文檔并返回 True or False // 兩個PDF完全一樣返回True, 不一樣返回False pdfUtil.compare(file1, file2);// 僅比較第3頁 pdfUtil.compare(file1, file2, 3, 3);// 比較第1~5頁 pdfUtil.compare(file1, file2, 1, 5);6、在文本模式下排除某些文本再對PDF文件進行比較
String file1="c:/files/doc1.pdf"; String file1="c:/files/doc2.pdf";//對比之前刪除有可能的文本內容 pdfutil.excludeText("1998", "testautomation");//使用正則表達式,在比較之前刪除指定內容 // \\d+ 在比較之前刪除PDF中的所有數字 \\d+是數字的正則表達式 pdfutil.excludeText("\\d+");// 比較PDF文檔并返回一個布爾值 // True表示相同; false 表示不一樣. pdfUtil.compare(file1, file2);// 僅比較第3頁 pdfUtil.compare(file1, file2, 3, 3);// 比較第1~5頁 pdfUtil.compare(file1, file2, 1, 5);7、以視圖模式比較PDF文件(較慢–對PDF文檔進行像素逐一比較 – 高亮PDF差異并將結果存儲為圖像)
String file1="c:/files/doc1.pdf"; String file1="c:/files/doc2.pdf";// 比較PDF文檔并返回一個布爾值 // 兩個PDF完全一樣返回True, 不一樣返回False // 默認是 CompareMode.TEXT_MODE pdfUtil.setCompareMode(CompareMode.VISUAL_MODE); pdfUtil.compare(file1, file2);// 單獨對比第3頁 pdfUtil.compare(file1, file2, 3, 3);// 對比PDF第1~5頁 pdfUtil.compare(file1, file2, 1, 5);//需要的話,可以將不同的地方高亮并以圖像存儲到你的本地 pdfUtil.highlightPdfDifference(true); pdfUtil.setImageDestinationPath("c:/imgpath"); pdfUtil.compare(file1, file2);樣例:
比如我有下面這樣的兩個PDF文檔。
使用PDFUtility比較之后會給出結果,如下圖,默認情況下使用洋紅色(Magenta)高亮差異的區域,顏色可以更改。
后續將會繼續實現的功能:
- 在視圖模式VISUAL_MODE下比較PDF文件時,忽略某些區域。
- 在視圖模式VISUAL_MODE下比較PDF文件時,根據一定的閾值/靈敏度返回 true / false。
總結
以上是生活随笔為你收集整理的批量比较两个PDF文档(PDFUtil,通过文本或者图像进行比较)第一篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 性能优化:使用距离平方而不是距离
- 下一篇: 主成分分析的步骤