
在文档处理和版本对比的场景中,快速找出两份相似文档之间的差异是一项常见需求。本文实现一个用于 PDF 文档差异检测的 Python 工具,能够大大提高文档对比的效率。
PDF 文档对比的核心在于提取文本内容并进行差异分析。使用 PyPDF2 库读取 PDF 内容,然后通过文本比较算法找出差异部分。
"""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、符号说明:
在运行代码前,需要安装必要的库:
pip install PyPDF2方法适用于文档版本控制、合同修订对比、学术论文修改跟踪等场景,能够大大提高文档对比的效率。实际使用时请确保 PDF 文档是可读的文本型 PDF,对于扫描版 PDF 需要先进行 OCR 处理。对于更复杂的 PDF 对比需求,可以考虑增强功能:
1、格式对比:除了文本内容,还可以比较字体、布局等格式差异。
2、图像对比:使用 OCR 技术提取和比较 PDF 中的图像内容。
3、高亮显示:生成带有高亮差异标记的新 PDF 文档。
“无他,惟手熟尔”!有需要的用起来!
如果你觉得这篇文章有用,欢迎点赞、转发、收藏、留言、推荐❤!
本文分享自 Nicholas与Pypi 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!