原文地址:https://alphahinex.github.io/2024/09/28/compare-pdfs/
description: "本文給出兩個(gè)比較相似 PDF 文件內(nèi)容差異的方法"
date: 2024.09.28 10:34
categories:
- Others
tags: [Python, PDF]
keywords: pdf, diff, compare, PyMuPDF, difflib, DiffPDF
本文給出兩個(gè)比較相似 PDF 文件內(nèi)容差異的方法,
以 《Understanding DeepLearning (5 August 2024)》
和 《Understanding DeepLearning (28 August 2024)》
為例進(jìn)行對(duì)比也殖。
PyMuPDF + difflib
此方法引自 Python對(duì)比PDF文件并生成對(duì)比文件。
先用 PyMuPDF 提取 PDF 文件中的文字內(nèi)容捆毫,再通過 difflib 模塊輸出差異內(nèi)容。
安裝依賴:
pip install PyMuPDF
將以下代碼保存至 compare_diff.py
:
import os
file1 = input("請(qǐng)輸入第一個(gè)pdf文件路徑:")
file2 = input("請(qǐng)輸入第二個(gè)pdf文件路徑:")
# 使用PyMuPDF庫打開pdf文件
import pymupdf
doc1 = pymupdf.open(file1)
doc2 = pymupdf.open(file2)
# 獲取pdf文件中的文本內(nèi)容
text1 = ""
text2 = ""
for page in doc1:
text1 += page.get_text()
for page in doc2:
text2 += page.get_text()
# 對(duì)比文本內(nèi)容
if text1 == text2:
print("兩個(gè)pdf文件內(nèi)容相同")
else:
print("兩個(gè)pdf文件內(nèi)容不同")
# 生成對(duì)比文件
import difflib
# 將文本內(nèi)容轉(zhuǎn)換為列表
text1_lines = text1.splitlines()
text2_lines = text2.splitlines()
# 對(duì)比文本內(nèi)容
d = difflib.Differ()
diff = d.compare(text1_lines, text2_lines)
# 生成有標(biāo)注的對(duì)比文件
diff_html = difflib.HtmlDiff().make_file(text1_lines, text2_lines)
file1_path = os.path.dirname(file1)
with open(os.path.join(file1_path, "diff.html"), "w", encoding='utf-8') as f:
f.write(diff_html)
print("對(duì)比文件已生成")
$ python3 compare_diff.py
請(qǐng)輸入第一個(gè)pdf文件路徑:/Users/alphahinex/Desktop/compare_pdf/UnderstandingDeepLearning_08_05_24_C.pdf
請(qǐng)輸入第二個(gè)pdf文件路徑:/Users/alphahinex/Desktop/compare_pdf/UnderstandingDeepLearning_08_28_24_C.pdf
兩個(gè)pdf文件內(nèi)容不同
對(duì)比文件已生成
打開生成的 diff.html
文件冲甘,可以看到兩個(gè) PDF 文件的內(nèi)容差異:
DiffPDF
DiffPDF 老版本是 開源軟件绩卤,目前為商用版,有 20 天試用期江醇,提供了更多功能以及對(duì)多核處理器更好的支持濒憋。
老版本目前官網(wǎng)不再提供,可以從 這里 找到一些老版本的源碼和 Windows 版本可執(zhí)行文件陶夜。
參照源碼包中 README 內(nèi)容凛驮,可以編譯其他系統(tǒng)版本。