P

pdf

全面的PDF处理工具包,支持文本与表格提取、新PDF创建、文档合并/拆分及表单处理功能。当Claude需要批量填写PDF表单,或通过编程方式大规模处理、生成或分析PDF文档时使用。

PDF 处理技能 - Python 文档自动化工具包

技能概述

PDF 处理技能是一套完整的 Python 文档操作工具,用于从 PDF 中提取文本和表格数据、创建新文档、合并和分割文件,以及处理表单填写等任务,帮助用户实现文档处理自动化。

适用场景

  1. 数据提取与分析 - 从发票、报表、扫描文档中提取结构化数据,支持表格识别和 OCR 文字识别,适用于财务、数据分析等需要处理大量纸质文档数字化工作的场景。

  2. 文档自动化生成 - 使用 reportlab 创建格式化的 PDF 报告、合同、证书等文档,或通过模板批量生成个性化文档,适用于企业报表、自动化通知单生成等场景。

  3. 文档批量处理 - 合并多个扫描文件、分割大型文档、批量添加水印或密码保护,适用于档案管理、文件整理、文档安全保护等日常办公场景。

核心功能

  1. 文本与表格提取 - 使用 pdfplumber 从 PDF 中精确提取文本内容和表格数据,支持保持原始布局,识别复杂表格结构,可将提取的数据直接转换为 Excel 格式进行后续分析。

  2. PDF 操作与转换 - 基于 pypdf 实现文档合并、分割、旋转、添加水印等基础操作,支持通过 qpdf、pdftk 等命令行工具进行批量处理,结合 OCR 技术处理扫描版文档。

  3. PDF 创建与表单处理 - 使用 reportlab 库从头创建 PDF 文档,支持多页面布局、图文混排、自定义样式;提供表单填写功能,可自动化填充 PDF 表单字段并保存。

常见问题

如何从 PDF 中提取表格数据到 Excel?

使用 pdfplumber 库可以识别 PDF 中的表格结构并提取数据。代码示例:

import pdfplumber
import pandas as pd

with pdfplumber.open("document.pdf") as pdf:
    all_tables = []
    for page in pdf.pages:
        tables = page.extract_tables()
        for table in tables:
            if table:
                df = pd.DataFrame(table[1:], columns=table[0])
                all_tables.append(df)
    
    if all_tables:
        combined_df = pd.concat(all_tables, ignore_index=True)
        combined_df.to_excel("extracted_tables.xlsx", index=False)

Python 处理 PDF 用哪个库最好?

不同任务适合不同库:

  • pypdf - 最适合基础操作(合并、分割、旋转、加密)
  • pdfplumber - 最适合文本和表格提取,识别准确度高
  • reportlab - 最适合从头创建 PDF,支持复杂布局
  • pytesseract + pdf2image - 适合扫描版 OCR 识别
  • pdf-lib - 适合 JavaScript 环境或需要填写表单的场景

大多数任务可以通过组合这些库完成,具体选择取决于你的需求和开发环境。

如何批量合并多个 PDF 文件?

使用 pypdf 可以轻松合并多个 PDF:

from pypdf import PdfWriter, PdfReader

writer = PdfWriter()
for pdf_file in ["doc1.pdf", "doc2.pdf", "doc3.pdf"]:
    reader = PdfReader(pdf_file)
    for page in reader.pages:
        writer.add_page(page)

with open("merged.pdf", "wb") as output:
    writer.write(output)

如需命令行批量处理,可以使用 qpdf:qpdf --empty --pages file1.pdf file2.pdf -- merged.pdf

扫描版 PDF 怎样提取文字?

扫描版 PDF 是图片格式,需要先转换为图像再进行 OCR 识别:

import pytesseract
from pdf2image import convert_from_path

images = convert_from_path('scanned.pdf')
text = ""
for i, image in enumerate(images):
    text += f"Page {i+1}:\n"
    text += pytesseract.image_to_string(image)
    text += "\n\n"

这需要安装 Tesseract OCR 引擎和 pdf2image 库,识别准确度取决于文档质量和文字清晰度。

PDF 处理能识别手写字迹吗?

标准 OCR 工具(如 Tesseract)对印刷体识别效果较好,但对个人手写字迹识别能力有限。如果需要识别手写内容,建议:

  1. 使用更高阶的 OCR 服务(如 Google Cloud Vision API、Azure OCR)
  2. 考虑人工校对或手写内容数字化输入
  3. 对于表单手写签字等场景,可能需要专门的签名识别工具

大多数文档处理场景(发票、报表、合同)都是印刷体,标准 OCR 即可满足需求。