首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python 自动找出两份 PDF 文档的差别的方法

Python 自动找出两份 PDF 文档的差别的方法

作者头像
用户11081884
发布2026-07-20 19:02:11
发布2026-07-20 19:02:11
350
举报

在文档处理和版本对比的场景中,快速找出两份相似文档之间的差异是一项常见需求。本文实现一个用于 PDF 文档差异检测的 Python 工具,能够大大提高文档对比的效率。

实现思路

PDF 文档对比的核心在于提取文本内容并进行差异分析。使用 PyPDF2 库读取 PDF 内容,然后通过文本比较算法找出差异部分。

代码实现

代码语言:javascript
复制
"""Python 自动找出两份 PDF 文档的差别"""
import PyPDF2
import os
from difflib import Differ

def extract_pdf_text(file_path):
    """提取 PDF 文档中的所有文本内容"""
    text_content = []
    try:
        with open(file_path, 'rb') as file:
            pdf_reader = PyPDF2.PdfReader(file)
            for page in pdf_reader.pages:
                text = page.extract_text()
                if text.strip():  # 忽略空页面
                    text_content.append(text)
    except Exception as e:
        print(f"读取 PDF 文件时出错: {e}")
    return text_content

def compare_pdf_documents(pdf1_path, pdf2_path, output_format='console'):
    """比较两个 PDF 文档的差异"""
    
    # 提取文本内容
    pdf1_content = extract_pdf_text(pdf1_path)
    pdf2_content = extract_pdf_text(pdf2_path)
    
    # 将内容转换为行列表以便比较
    pdf1_lines = []
    for page_text in pdf1_content:
        pdf1_lines.extend(page_text.split('\n'))
    
    pdf2_lines = []
    for page_text in pdf2_content:
        pdf2_lines.extend(page_text.split('\n'))
    
    # 使用 difflib 进行差异比较
    differ = Differ()
    diff_result = list(differ.compare(pdf1_lines, pdf2_lines))
    
    # 过滤出有差异的行
    differences = [line for line in diff_result if line.startswith(('+', '-'))]
    
    if not differences:
        print("两个 PDF 文档内容完全相同。")
        return
    
    if output_format == 'console':
        print("文档差异对比结果:")
        print("(- 表示第一个文档有但第二个文档没有)")
        print("(+ 表示第二个文档有但第一个文档没有)")
        print("-" * 50)
        
        for diff in differences:
            print(diff)
            
    elif output_format == 'file':
        output_filename = f"{os.path.splitext(pdf1_path)[0]}_vs_{os.path.splitext(pdf2_path)[0]}_diff.txt"
        
        with open(output_filename, 'w', encoding='utf-8') as output_file:
            output_file.write("PDF 文档差异对比报告\n")
            output_file.write("=" * 40 + "\n")
            output_file.write("(-) 第一个文档独有的内容\n")
            output_file.write("(+) 第二个文档独有的内容\n\n")
            
            for diff in differences:
                output_file.write(diff + '\n')
        
        print(f"差异报告已保存到: {output_filename}")
    
    else:
        print("不支持的输出格式,请选择 'console' 或 'file'")

# 使用示例
if __name__ == "__main__":
    # 比较两个 PDF 文档并在控制台显示差异
    compare_pdf_documents('document1.pdf', 'document2.pdf', output_format='console')
    
    # 或者将差异保存到文件
    # compare_pdf_documents('document1.pdf', 'document2.pdf', output_format='file')

功能说明

1、文本提取: extract_pdf_text 函数使用 PyPDF2 库逐页提取 PDF 文本内容;

2、差异检测:利用 Python 标准库 difflib Differ 类进行行级差异比较;

3、输出选项:支持控制台输出和文件保存两种方式;

4、符号说明:

  • - 开头的行:仅存在于第一个文档
  • + 开头的行:仅存在于第二个文档

安装依赖

在运行代码前,需要安装必要的库:

代码语言:javascript
复制
pip install PyPDF2

方法适用于文档版本控制、合同修订对比、学术论文修改跟踪等场景,能够大大提高文档对比的效率。实际使用时请确保 PDF 文档是可读的文本型 PDF,对于扫描版 PDF 需要先进行 OCR 处理。对于更复杂的 PDF 对比需求,可以考虑增强功能:

1、格式对比:除了文本内容,还可以比较字体、布局等格式差异。

2、图像对比:使用 OCR 技术提取和比较 PDF 中的图像内容。

3、高亮显示:生成带有高亮差异标记的新 PDF 文档。

“无他,惟手熟尔”!有需要的用起来!

如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Nicholas与Pypi 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 实现思路
  • 代码实现
  • 功能说明
  • 安装依赖
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档