Python 处理 PDF:合并、拆分、提取文本全流程
·
Python 处理 PDF 全流程指南
核心工具库
- PyPDF2:基础操作(合并/拆分)
- pdfplumber:文本提取(保留格式)
- 安装命令:
pip install PyPDF2 pdfplumber
1. PDF 合并
将多个 PDF 合并为单一文件:
from PyPDF2 import PdfMerger
def merge_pdfs(file_list, output_path):
merger = PdfMerger()
for file in file_list:
merger.append(file)
merger.write(output_path)
merger.close()
# 示例用法
merge_pdfs(["doc1.pdf", "doc2.pdf"], "merged.pdf")
2. PDF 拆分
按页拆分 PDF 文件:
from PyPDF2 import PdfReader, PdfWriter
def split_pdf(input_path, output_prefix):
reader = PdfReader(input_path)
for page_num in range(len(reader.pages)):
writer = PdfWriter()
writer.add_page(reader.pages[page_num])
with open(f"{output_prefix}_page{page_num+1}.pdf", "wb") as f:
writer.write(f)
# 示例用法
split_pdf("large_file.pdf", "split_doc")
3. 文本提取
精确提取文本内容(含布局信息):
import pdfplumber
def extract_text(pdf_path):
full_text = ""
with pdfplumber.open(pdf_path) as pdf:
for page in pdf.pages:
text = page.extract_text()
if text: # 避免空页
full_text += text + "\n\n"
return full_text
# 示例用法
text_content = extract_text("report.pdf")
print(text_content[:500]) # 打印前500字符
4. 高级文本处理
(1) 提取表格数据
with pdfplumber.open("data.pdf") as pdf:
first_page = pdf.pages[0]
table = first_page.extract_table()
for row in table:
print(row) # 输出表格行数据
(2) 关键词定位
target_word = "合同条款"
with pdfplumber.open("contract.pdf") as pdf:
for page in pdf.pages:
words = page.extract_words()
for word in words:
if target_word in word["text"]:
print(f"发现关键词 '{target_word}' 在 {word['x0']}, {word['top']}")
常见问题解决
| 问题类型 | 解决方案 |
|---|---|
| 扫描版 PDF 无法提取文本 | 使用 OCR 库(如 pytesseract) |
| 合并文件顺序错乱 | 用 merger.append(file) 确保顺序 |
| 中文乱码 | 检查 PDF 编码,尝试 pdfplumber 的 laparams 参数 |
注:处理加密 PDF 需先解密:
from PyPDF2 import PdfReader reader = PdfReader("encrypted.pdf") if reader.is_encrypted: reader.decrypt("password")
完整工作流示例
# 合并季度报告 → 拆分Q3部分 → 提取关键数据
merge_pdfs(["Q1.pdf", "Q2.pdf", "Q3.pdf"], "2023_reports.pdf")
split_pdf("2023_reports.pdf", "quarterly") # 生成拆分文件
q3_text = extract_text("quarterly_page9.pdf") # 假设Q3在第9页
# 提取销售额数据
import re
sales_data = re.findall(r"销售额:\$\d+,\d+", q3_text)
print(f"Q3销售额记录:{sales_data}")
通过组合这些操作,可构建自动化 PDF 处理流程,适用于合同管理、报表分析等场景。
更多推荐


所有评论(0)