1. PDF文档处理方案概述
PDF作为最广泛使用的文档格式之一,其复杂的内部结构和多样的内容呈现方式给自动化处理带来了诸多挑战。在实际项目中,我们经常需要从PDF中提取文本内容、识别文档结构、处理表格和图片等元素。本文将深入探讨四种主流的Python PDF处理方案,从轻量级的基础文本提取到智能化的文档结构分析,为不同场景下的PDF处理需求提供完整的解决方案。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与基础配置
2.1 依赖包安装
根据不同的处理方案,我们需要安装相应的Python库。以下是各方案的核心依赖:
bash复制# 方案一:PyPDF(最轻量)
pip install pypdf langchain-community
# 方案二:PyMuPDF(功能强大)
pip install pymupdf
# 方案三:Unstructured(智能解析)
pip install "unstructured[pdf]" langchain-unstructured
# 中文OCR支持(可选)
brew install tesseract-lang # macOS
# 或
sudo apt-get install tesseract-ocr-chi-sim # Ubuntu
# 一键安装所有依赖
pip install pypdf pymupdf "unstructured[pdf]" langchain-community langchain-unstructured
2.2 测试文档准备
建议准备不同类型的PDF文档用于测试:
- 纯文本文档(如技术文档)
- 复杂排版文档(多栏、图文混排)
- 扫描件或图片型PDF
- 包含表格的文档
3. 方案一:PyPDF基础文本提取
3.1 核心功能实现
PyPDF是最轻量级的PDF处理方案,适合简单的文本提取需求:
python复制from langchain_community.document_loaders import PyPDFLoader
# 加载PDF文件
loader = PyPDFLoader("../99-doc-data/黑悟空/黑神话悟空.pdf")
data = loader.load()
# 遍历每一页
for i, page in enumerate(data):
print(f"=== 第 {i+1} 页 ===")
print(page.page_content)
print(f"元数据: {page.metadata}")
print("-" * 50)
3.2 方案特点分析
优势:
- 安装简单,无外部依赖
- 处理速度快,内存占用低
- 按页分割,结构清晰
- 适合纯文本PDF处理
局限性:
- 无法处理复杂布局(多栏、图文混排)
- 不识别文档结构(标题、段落等)
- 不支持扫描件OCR
- 表格提取效果较差
3.3 适用场景建议
PyPDF最适合以下情况:
- 文档为简单的纯文本格式
- 需要快速提取内容而不关心格式
- 对文档结构要求不高
- 资源受限的环境(如服务器低配置)
4. 方案二:PyMuPDF高级功能处理
4.1 核心功能实现
PyMuPDF提供了更丰富的PDF处理能力:
python复制import pymupdf
# 打开PDF文件
doc = pymupdf.open("../../99-doc-data/黑悟空/黑神话悟空.pdf")
# 提取所有页面的文本
text = [page.get_text() for page in doc]
print(text)
# 获取文档元数据
print("=== PyMuPDF 基本信息提取 ===")
print(f"文档页数: {len(doc)}")
print(f"文档标题: {doc.metadata.get('title', 'N/A')}")
print(f"文档作者: {doc.metadata.get('author', 'N/A')}")
print(f"创建时间: {doc.metadata.get('creationDate', 'N/A')}")
print(f"完整元数据: {doc.metadata}")
# 遍历每一页,提取详细信息
for page_num, page in enumerate(doc):
print(f"\n--- 第 {page_num + 1} 页 ---")
# 提取文本
text = page.get_text()
print(f"文本内容: {text[:200]}...") # 显示前200个字符
# 提取图片
images = page.get_images()
print(f"图片数量: {len(images)}")
# 获取页面链接
links = page.get_links()
print(f"链接数量: {len(links)}")
# 获取页面尺寸
width, height = page.rect.width, page.rect.height
print(f"页面尺寸: {width:.2f} x {height:.2f}")
doc.close()
4.2 进阶功能示例
PyMuPDF还支持更多高级功能:
python复制import pymupdf
doc = pymupdf.open("document.pdf")
page = doc[0]
# 1. 提取图片并保存
for img_index, img in enumerate(page.get_images()):
xref = img[0]
base_image = doc.extract_image(xref)
image_bytes = base_image["image"]
with open(f"image_{img_index}.png", "wb") as f:
f.write(image_bytes)
# 2. 提取表格(需要额外处理)
tables = page.find_tables()
for table in tables:
df = table.to_pandas()
print(df)
# 3. 搜索文本
text_insta
