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 编码,尝试 pdfplumberlaparams 参数

:处理加密 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 处理流程,适用于合同管理、报表分析等场景。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐