最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Python實(shí)現(xiàn)對(duì)比兩個(gè)PDF文檔的差異

 更新時(shí)間:2026年04月30日 08:18:13   作者:LSTM97  
在文檔版本管理、合同審核、報(bào)告校對(duì)等場(chǎng)景中,準(zhǔn)確識(shí)別兩個(gè)?PDF?文件之間的差異是一項(xiàng)常見(jiàn)需求,本文介紹如何利用?Spire.PDF?for?Python?庫(kù),通過(guò)編程方式自動(dòng)化完成?PDF?文檔的差異對(duì)比工作,希望對(duì)大家有所幫助

在文檔版本管理、合同審核、報(bào)告校對(duì)等場(chǎng)景中,準(zhǔn)確識(shí)別兩個(gè) PDF 文件之間的差異是一項(xiàng)常見(jiàn)需求。傳統(tǒng)的人工逐頁(yè)比對(duì)方式效率低下且容易遺漏。本文介紹如何利用 Spire.PDF for Python 庫(kù),通過(guò)編程方式自動(dòng)化完成 PDF 文檔的差異對(duì)比工作。

環(huán)境配置

首先需要通過(guò) pip 安裝 Spire.PDF 庫(kù):

pip install Spire.PDF

該庫(kù)提供完整的 PDF 處理能力,其中 PdfComparer 類專門(mén)用于文檔對(duì)比功能。需要注意的是,該庫(kù)為商業(yè)產(chǎn)品,但提供具備基礎(chǔ)功能的免費(fèi)版本供開(kāi)發(fā)者評(píng)估使用。

完整文檔對(duì)比

當(dāng)需要比較兩個(gè) PDF 文檔的全部?jī)?nèi)容時(shí),可采用以下實(shí)現(xiàn)方式:

from spire.pdf.common import *
from spire.pdf import *

# 加載第一個(gè)文檔
doc_one = PdfDocument("PDF_ONE.pdf")       

# 加載第二個(gè)文檔
doc_two = PdfDocument("PDF_TWO.pdf")  

# 創(chuàng)建 PdfComparer 對(duì)象,以 doc_two 為基準(zhǔn)文檔,doc_one 為目標(biāo)文檔
comparer = PdfComparer(doc_two, doc_one)

# 執(zhí)行對(duì)比操作,并將結(jié)果保存為新的 PDF 文件
comparer.Compare("ComparisonResults.pdf") 

# 釋放文檔資源
doc_one.Dispose()
doc_two.Dispose()

執(zhí)行上述代碼后,程序?qū)⑸梢环菝麨?ComparisonResults.pdf 的差異報(bào)告。報(bào)告中通過(guò)不同顏色高亮顯示文檔間的差異內(nèi)容,便于用戶快速定位變更位置。

參數(shù)說(shuō)明 :PdfComparer 構(gòu)造函數(shù)中,第一個(gè)參數(shù)作為基準(zhǔn)版本,第二個(gè)參數(shù)作為待比較版本。輸出的差異報(bào)告以基準(zhǔn)版本為參照進(jìn)行標(biāo)注。

指定頁(yè)面對(duì)比

在實(shí)際應(yīng)用中,用戶可能僅關(guān)注文檔的部分頁(yè)面。以下代碼演示了如何限定頁(yè)面范圍進(jìn)行對(duì)比:

from spire.pdf.common import *
from spire.pdf import *

# 加載兩個(gè) PDF 文檔
doc_one = PdfDocument("PDF_ONE.pdf")       
doc_two = PdfDocument("PDF_TWO.pdf")  

# 創(chuàng)建 PdfComparer 實(shí)例
comparer = PdfComparer(doc_two, doc_one)

# 設(shè)置頁(yè)面范圍:比較第一個(gè)文檔的第1至3頁(yè)與第二個(gè)文檔的第1至3頁(yè)
comparer.PdfCompareOptions.SetPageRanges(1, 3, 1, 3)

# 執(zhí)行指定頁(yè)面的對(duì)比操作
comparer.Compare("ComparePageRanges.pdf") 

# 釋放資源
doc_one.Dispose()
doc_two.Dispose()

SetPageRanges(start1, end1, start2, end2) 方法的前兩個(gè)參數(shù)指定基準(zhǔn)文檔的起始和結(jié)束頁(yè)碼,后兩個(gè)參數(shù)指定待比較文檔的起始和結(jié)束頁(yè)碼。該方法支持兩端頁(yè)碼范圍不一致的情況,系統(tǒng)將嚴(yán)格按照所設(shè)范圍進(jìn)行逐頁(yè)對(duì)照。

差異報(bào)告解讀

生成的對(duì)比結(jié)果 PDF 文檔采用以下標(biāo)記規(guī)范:

  • 黃色高亮 :表示新增內(nèi)容
  • 紅色高亮 :表示被刪除的內(nèi)容

用戶可通過(guò)左右對(duì)照視圖直觀地識(shí)別兩版本文檔之間的具體差異。

典型應(yīng)用場(chǎng)景

  • 法律合同審核 :快速識(shí)別合同條款的修訂痕跡
  • 學(xué)術(shù)論文校對(duì) :定位不同版本論文間的文字修改
  • 技術(shù)文檔版本管理 :追蹤產(chǎn)品說(shuō)明書(shū)的變更記錄
  • 財(cái)務(wù)報(bào)表核對(duì) :驗(yàn)證數(shù)據(jù)報(bào)表的數(shù)值變動(dòng)

注意事項(xiàng)

  1. 免費(fèi)版本對(duì)處理頁(yè)數(shù)有限制(通常為前10頁(yè)),完整功能需獲取商業(yè)授權(quán)。
  2. 該對(duì)比功能適用于基于文本內(nèi)容的 PDF 文檔。對(duì)于以圖片形式存儲(chǔ)的掃描件,對(duì)比效果將受到限制。
  3. 完成對(duì)比操作后,務(wù)必調(diào)用 Dispose() 方法釋放文檔對(duì)象占用的系統(tǒng)資源,避免內(nèi)存泄漏。

方法補(bǔ)充

對(duì)比PDF文檔的差異,有幾種不同的路徑可選。你是想把它集成到自動(dòng)化流程里,還是只需要一個(gè)直觀的可視化對(duì)比報(bào)告呢?為了讓你快速選擇,我把幾種主流方案的優(yōu)缺點(diǎn)整理了一下:

方案對(duì)比特點(diǎn)優(yōu)點(diǎn)局限性推薦場(chǎng)景
pdf-diff輕量化命令行工具輸出直觀(含差異圈框)、開(kāi)源、使用簡(jiǎn)單依賴外部工具(Poppler),輸出為差異圖片快速目視,需要差異可視化,不依賴大型庫(kù)
difflib + PyMuPDF純文本差異對(duì)比輕量、可控性強(qiáng)、標(biāo)準(zhǔn)庫(kù)、無(wú)需安裝僅對(duì)比文本,忽略格式/排版差異僅需關(guān)注內(nèi)容文字,批量腳本集成
Spire.PDF for Python高保真商業(yè)庫(kù)對(duì)比支持格式/布局對(duì)比、商業(yè)級(jí)保真、開(kāi)發(fā)效率高商業(yè)收費(fèi)(有免費(fèi)水印/頁(yè)數(shù)限制)、非開(kāi)源商業(yè)環(huán)境、硬核排版差異對(duì)比
pdfcompare支持圖像、DOCX對(duì)比跨格式對(duì)比、支持掃描件OCR、報(bào)告導(dǎo)出依賴較多外部庫(kù)(Tesseract、wkhtmltopdf)需要支持掃描件/圖片PDF、跨格式對(duì)比
visualpdfdiff基于渲染的像素對(duì)比視覺(jué)零差異,確保布局像素級(jí)相符像素級(jí)嚴(yán)格,配置略微復(fù)雜UI自動(dòng)化測(cè)試,前后端視覺(jué)回歸

1. pdf-diff:輕量級(jí)可視化差異工具

這是一個(gè)專為PDF差異設(shè)計(jì)的命令行工具,能將差異頁(yè)渲染成PNG圖片,并用紅框標(biāo)示出變動(dòng)區(qū)域。

安裝配置:該工具依賴 poppler,需提前安裝??墒褂冒芾砥鳎ㄈ?nbsp;aptbrew)安裝,或從Poppler官網(wǎng)下載,并將 bin 目錄加入系統(tǒng) PATH 環(huán)境變量中。

pip install pdf-diff
  • 關(guān)鍵概念:該工具的核心函數(shù)是 pdf_diff.compute_changes,它通過(guò)提取兩個(gè)PDF的文本坐標(biāo)框,再比對(duì)這些文本塊之間的差異來(lái)實(shí)現(xiàn)對(duì)比。
  • 命令行:最直接的使用方式是終端命令,無(wú)需編寫(xiě)代碼,非常適合腳本快速調(diào)用。
# 生成包含差異的PNG圖片
pdf-diff before.pdf after.pdf > diff.png

Python 集成:你也可以在腳本中調(diào)用其核心函數(shù)來(lái)生成差異圖片。

import pdf_diff
# 計(jì)算兩個(gè) PDF 的差異,并渲染到 PNG 文件
pdf_diff.compute_changes(
    before="before.pdf",
    after="after.pdf",
    diff_output="diff.png"
)

2. difflib + PyMuPDF:輕量文本差異對(duì)比

這套組合方案完全依賴Python標(biāo)準(zhǔn)庫(kù) difflib 和開(kāi)源庫(kù) PyMuPDF(即 fitz),整個(gè)過(guò)程無(wú)需任何商業(yè)許可,非常適合僅關(guān)注文本內(nèi)容變化的場(chǎng)景。

關(guān)鍵概念:流程分為三步:1) 用 PyMuPDF 提取PDF中的純文本;2) 將提取的文本按換行分割成文本行列表;3) 將兩個(gè)列表交給 difflib.HtmlDiff 生成一個(gè)帶高亮的HTML對(duì)比報(bào)告。

代碼示例

import pymupdf  # 或者 import fitz
import difflib
import os
def compare_pdf_text(pdf1_path, pdf2_path, output_html="diff.html"):
    # 1. 打開(kāi)兩個(gè) PDF 文檔
    doc1 = pymupdf.open(pdf1_path)
    doc2 = pymupdf.open(pdf2_path)
    # 2. 提取全部文本
    text1 = ""
    for page in doc1:
        text1 += page.get_text()
    text2 = ""
    for page in doc2:
        text2 += page.get_text()
    # 3. 將文本轉(zhuǎn)換為行列表,供 difflib 使用
    text1_lines = text1.splitlines()
    text2_lines = text2.splitlines()
    # 4. 生成 HTML 格式的對(duì)比報(bào)告
    diff = difflib.HtmlDiff()
    html_diff = diff.make_file(text1_lines, text2_lines)
    # 5. 保存報(bào)告到文件
    # 獲取源PDF所在目錄,用于存放比較文件,避免目錄權(quán)限問(wèn)題
    base_dir = os.path.dirname(pdf1_path) # 或任何你指定的目錄
    output_path = os.path.join(base_dir, output_html)
    with open(output_path, "w", encoding="utf-8") as f:
        f.write(html_diff)
    print(f"差異報(bào)告已生成: {output_path}")
# 使用示例
compare_pdf_text("文檔_初版.pdf", "文檔_修訂版.pdf")

輸出:打開(kāi)生成的 diff.html 文件,僅能看到文本內(nèi)容的差異(新增、刪除、修改),無(wú)法體現(xiàn)格式和排版變化。

3. Spire.PDF for Python:高保真商業(yè)庫(kù)

若希望得到一份與原始文件排版完全一致的PDF差異報(bào)告,Spire.PDF 是理想選擇。PdfComparer 對(duì)象能直接對(duì)比兩個(gè)PDF文檔,并在結(jié)果中高亮刪除(紅色)和新增(黃色或其它顏色)的內(nèi)容。

關(guān)鍵概念

  • 順序比較PdfComparer 采用的是“順序?qū)Ρ?rdquo;模式。它會(huì)將A文檔的第1頁(yè)與B文檔的第1頁(yè)進(jìn)行比較,第2頁(yè)與第2頁(yè)比較,以此類推。如果兩個(gè)文檔的頁(yè)碼數(shù)量不一致,你可以通過(guò) SetPageRanges 方法定義詳盡的比較范圍。
  • 對(duì)比控制:除了頁(yè)面范圍,還可以通過(guò) PdfCompareOptions 屬性控制對(duì)比行為,例如將 OnlyCompareText 設(shè)置為 True 來(lái)忽略圖形、圖片等差異,只關(guān)注文本變化。

代碼示例

from spire.pdf.common import *
from spire.pdf import *
# 1. 加載兩個(gè) PDF 文檔
original = PdfDocument("document_original.pdf");  # 基準(zhǔn)版本
revised = PdfDocument("document_revised.pdf");    # 待比較版本
# 2. 創(chuàng)建 PdfComparer 對(duì)象,傳入基準(zhǔn)版本和待比較版本
comparer = PdfComparer(original, revised)
# (可選) 設(shè)置比較選項(xiàng): 例如只比較文本
comparer.PdfCompareOptions.OnlyCompareText = True
# (可選) 設(shè)置比較范圍: 例如只比較修訂版的第 2 到 4 頁(yè)
# comparer.PdfCompareOptions.SetPageRanges(1, 1, 2, 4) 
# 3. 執(zhí)行對(duì)比,并生成PDF格式的差異報(bào)告
comparer.Compare("comparison_result.pdf")
# 4. 釋放資源
original.Dispose()
revised.Dispose()
  • 輸出:生成的 comparison_result.pdf 將保留原文件的排版布局,并用明顯的顏色高亮出所有變更,利于即時(shí)審查。
  • 準(zhǔn)備條件:首先需要安裝 Spire.PDF 庫(kù),運(yùn)行 pip install Spire.PDF 即可。不過(guò)請(qǐng)注意,該產(chǎn)品為商業(yè)軟件,其免費(fèi)版可能存在頁(yè)數(shù)限制,建議按照官方渠道獲取授權(quán)或進(jìn)行測(cè)試。

4. pdfcompare:支持OCR的文檔&圖片對(duì)比

pdfcompare 的定位是跨格式的文檔對(duì)比器,它最大亮點(diǎn)在于能通過(guò)集成 Tesseract 引擎,對(duì)掃描生成的圖片PDF進(jìn)行文字識(shí)別(OCR)后,再對(duì)比其文本內(nèi)容。因此,它非常適合處理非文字型的掃描件PDF。

關(guān)鍵概念

依賴管理pdfcompare 的 OCR 功能強(qiáng)依賴 tesseract-ocr 和 wkhtmltopdf 兩個(gè)外部程序。它通過(guò)調(diào)用命令行來(lái)使用 Tesseract 進(jìn)行文本識(shí)別。

對(duì)比報(bào)告:除了強(qiáng)大的OCR支持,你還可以通過(guò)與 wkhtmltopdf 的結(jié)合,生成結(jié)構(gòu)化的HTML報(bào)告,或直接導(dǎo)出純文本/TXT報(bào)告。

命令行用法

# 生成一份HTML差異報(bào)告
pdfcompare original.pdf scanned_revision.pdf --output html

Python 集成

from pdfcompare.cli import compare_files
# 核心對(duì)比函數(shù)
compare_files("original.pdf", "scanned_copy.pdf", output_format="pdf")

總結(jié)

Spire.PDF for Python 提供了簡(jiǎn)潔而強(qiáng)大的 PDF 文檔對(duì)比能力,開(kāi)發(fā)者僅需少量代碼即可實(shí)現(xiàn)自動(dòng)化差異分析。無(wú)論是整篇文檔對(duì)比還是指定頁(yè)面對(duì)比,該庫(kù)均能有效提升文檔審核工作的效率與準(zhǔn)確性。

到此這篇關(guān)于使用Python實(shí)現(xiàn)對(duì)比兩個(gè)PDF文檔的差異的文章就介紹到這了,更多相關(guān)Python對(duì)比PDF文檔內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python定時(shí)任務(wù)APScheduler安裝及使用解析

    Python定時(shí)任務(wù)APScheduler安裝及使用解析

    這篇文章主要介紹了Python定時(shí)任務(wù)APScheduler安裝及使用解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 淺談Matplotlib簡(jiǎn)介和pyplot的簡(jiǎn)單使用——文本標(biāo)注和箭頭

    淺談Matplotlib簡(jiǎn)介和pyplot的簡(jiǎn)單使用——文本標(biāo)注和箭頭

    這篇文章主要介紹了淺談Matplotlib簡(jiǎn)介和pyplot的簡(jiǎn)單使用——文本標(biāo)注和箭頭,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • python conda操作方法

    python conda操作方法

    這篇文章主要介紹了python conda操作方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 基于Python編寫(xiě)一個(gè)簡(jiǎn)單的http服務(wù)器

    基于Python編寫(xiě)一個(gè)簡(jiǎn)單的http服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了如何基于Python編寫(xiě)一個(gè)簡(jiǎn)單的http服務(wù)器,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • Python直接使用plot()函數(shù)畫(huà)圖的方法實(shí)例

    Python直接使用plot()函數(shù)畫(huà)圖的方法實(shí)例

    Python非常簡(jiǎn)單而又非常強(qiáng)大,它的功能之一就是畫(huà)出漂亮的圖表,實(shí)現(xiàn)數(shù)據(jù)的可視化,下面這篇文章主要給大家介紹了關(guān)于Python直接使用plot()函數(shù)畫(huà)圖的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • Pytorch基本變量類型FloatTensor與Variable用法

    Pytorch基本變量類型FloatTensor與Variable用法

    今天小編就為大家分享一篇Pytorch基本變量類型FloatTensor與Variable用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Python入門(mén)學(xué)習(xí)之Python流處理過(guò)程

    Python入門(mén)學(xué)習(xí)之Python流處理過(guò)程

    本篇文章屬于Python入門(mén)篇,本文主要教大家學(xué)習(xí)Python流處理過(guò)程,通過(guò)Faust流處理庫(kù)來(lái)為大家詳細(xì)講解,有需要的朋友可以借鑒參考下
    2021-09-09
  • python實(shí)現(xiàn)文件批量重命名

    python實(shí)現(xiàn)文件批量重命名

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)文件批量重命名,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • python 還原梯度下降算法實(shí)現(xiàn)一維線性回歸

    python 還原梯度下降算法實(shí)現(xiàn)一維線性回歸

    這篇文章主要介紹了python 還原梯度下降算法實(shí)現(xiàn)一維線性回歸,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • eclipse創(chuàng)建python項(xiàng)目步驟詳解

    eclipse創(chuàng)建python項(xiàng)目步驟詳解

    在本篇內(nèi)容里小編給大家分享了關(guān)于eclipse創(chuàng)建python項(xiàng)目的具體步驟和方法,需要的朋友們跟著學(xué)習(xí)下。
    2019-05-05

最新評(píng)論

磴口县| 白山市| 云和县| 绿春县| 黎城县| 密山市| 连云港市| 高邑县| 额敏县| 通化市| 蕲春县| 西藏| 酒泉市| 吉木萨尔县| 香港 | 武鸣县| 呈贡县| 沂水县| 和田市| 肥东县| 方山县| 霍林郭勒市| 定结县| 丰宁| 牟定县| 广元市| 尼玛县| 高阳县| 象山县| 霞浦县| 乐陵市| 三都| 桃江县| 崇左市| 西峡县| 武宣县| 溧阳市| 海门市| 惠东县| 惠安县| 钟祥市|