我需要找到兩個pdf文件之間的區別。是否有任何Python相關的工具具有直接給出2個PDF的差異的特徵?如何獲得Python中的兩個PDF文件的差異?
回答
你是什麼意思的「差異」? PDF文本或某些佈局更改的差異(例如,調整了嵌入式圖形的大小)。第一個很容易檢測,第二個幾乎不可能(PDF是一個非常複雜的文件格式,提供無盡的文件格式功能)。
如果您想獲得文本差異,只需在這兩個PDF上運行pdf到文本實用程序,然後使用Python的內置差異庫來獲取轉換文本的差異。
這個問題涉及到python中的pdf到文本轉換:Python module for converting PDF to text。
此方法的可靠性取決於您正在使用的PDF生成器。如果你使用例如Adobe Acrobat和一些基於Ghostscript的PDF-Creator可以從SAME word文檔創建兩個PDF文件,儘管源文檔是相同的,但您仍可能會得到一個diff。
這是因爲有很多方法可以將源文檔的信息編碼爲PDF,並且每個轉換器使用不同的方法。通常,PDF到文本轉換器無法找出正確的文本流,特別是對於複雜的佈局或表格。
只是文字會做。 PDF生成器不應該是一個問題。 – Goutham 2009-08-21 09:30:27
如果您確實需要支持圖片,您可以從pdf中提取JPG:http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.html或將PDF轉換爲圖片並進行比較。 – 2014-10-24 15:24:36
檢查了這一點,它可能是有用的:http://pybrary.net/pyPdf/
pyPdf在我的測試中不是很健壯。它在由Illustrator/InDesign和其他矢量繪圖程序創建的pdf上崩潰。不過,對於來自Office應用程序的簡單PDF文件可能沒問題。另一個更可靠的選擇是來自xpdf工具包的pdftotext。 – fbuchinger 2009-08-21 09:34:49
我不知道你的使用情況,但對於腳本生成的PDF使用ReportLab的迴歸測試,我通過
- 轉換做差異PDF文件每一頁的圖像使用ghostsript
- 版本比較針對標準的PDF的頁面圖像的各頁,使用PIL
例如
im1 = Image.open(imagePath1)
im2 = Image.open(imagePath2)
imDiff = ImageChops.difference(im1, im2)
這適用於標記由於代碼更改而引入的任何更改。
第1步是否有一些參考? – yucer 2016-09-09 07:12:34
在我的加密的pdf unittest上遇到了同樣的問題,pdfminer和pyPdf都不適合我。
這裏有兩個命令(pdftocairo,pdftotext)在我的測試中很完美。 (Ubuntu的安裝:apt-get的安裝poppler的-utils的)
你可以通過PDF內容:
from subprocess import Popen, PIPE
def get_formatted_content(pdf_content):
cmd = 'pdftocairo -pdf - -' # you can replace "pdftocairo -pdf" with "pdftotext" if you want to get diff info
ps = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, stderr = ps.communicate(input=pdf_content)
if ps.returncode != 0:
raise OSError(ps.returncode, cmd, stderr)
return stdout
好像pdftocairo可以重繪PDF文件,pdftotext可以提取所有文本。
然後你就可以比較兩個PDF文件:
c1 = get_formatted_content(open('f1.pdf').read())
c2 = get_formatted_content(open('f2.pdf').read())
print(cmp(c1, c2)) # for binary compare
# import difflib
# print(list(difflib.unified_diff(c1, c2))) # for text compare
- 1. 如何獲得java中兩個zip文件之間的差異
- 2. 獲取兩個文件的差異
- 3. 獲得兩個表之間的差異?
- 4. 如何獲得Linux中兩個文件之間的差異(只有補充)
- 5. 如何獲得MongoDB中兩個字段的差異總和?
- 6. 如何獲得R中兩個集合的差異?
- 7. 如何獲得PHP中兩個日期之間的差異?
- 8. 如何在Python中異步獲取文件的差異
- 9. 當在Windows中的兩個文件上執行差異時,獲取兩個文件中差異的行數
- 10. 如何獲得python中兩個日期變量之間的小時差異
- 11. 如何獲得兩個S3存儲桶之間的文件差異?
- 12. 如何獲得兩個日期之間的星期差異
- 13. 如何獲得兩個日期之間的差異?
- 14. 如何獲得兩個數據表之間的差異
- 15. 如何獲得兩個日期之間的差異?
- 16. 如何獲得兩個日期之間的差異?
- 17. 比較兩個xml文件並獲得差異
- 18. 我如何在兩個時間戳中獲得差異
- 19. 如何在android中獲得兩個時間差異
- 20. 如何在JavaScript中獲得差異btw兩個數組?
- 21. 使用minGW差異顯示兩個文本文件的差異
- 22. Bash腳本獲得兩個目錄中文件的權限差異
- 23. 獲得兩行之間的差異並填充差異值
- 24. 獲取兩個不同分支中文件的差異
- 25. 從Python中的兩個列表中獲取差異
- 26. 如何減去兩個日期和時間來獲得差異
- 27. 在WHERE語句中獲得兩個數字之間的差異?
- 28. 獲取文件的兩個版本的可視化差異
- 29. 獲取python中兩個詞典之間的差異
- 30. 如何從time()差異中獲得HH:MM?
DIFF文字或全部內容或大小? – Steen 2009-08-21 09:11:33
該文本將做。 – Goutham 2009-08-21 09:16:16