PDF处理Skill PDFProcessing

PDF处理技能用于从PDF文件中提取文本和表格、填充表单、合并和拆分文档等操作,适用于文档自动化和数据提取任务。关键词:PDF处理,文本提取,表格提取,表单填充,PDF合并,Python编程,pdfplumber,pypdf。

其他 0 次安装 0 次浏览 更新于 3/21/2026

name: PDF 处理 description: 从PDF文件中提取文本和表格,填充表单,合并文档。当处理PDF文件或用户提到PDFs、表单或文档提取时使用。

PDF 处理

快速开始

使用pdfplumber从PDF中提取文本:

import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    text = pdf.pages[0].extract_text()
    print(text)

提取表格

自动检测并从PDF中提取表格:

import pdfplumber

with pdfplumber.open("report.pdf") as pdf:
    page = pdf.pages[0]
    tables = page.extract_tables()

    for table in tables:
        for row in table:
            print(row)

提取所有页面

高效处理多页文档:

import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    full_text = ""
    for page in pdf.pages:
        full_text += page.extract_text() + "

"

    print(full_text)

表单填充

对于PDF表单填充,请参阅FORMS.md获取完整指南,包括字段分析和验证。

合并PDFs

合并多个PDF文件:

from pypdf import PdfMerger

merger = PdfMerger()

for pdf in ["file1.pdf", "file2.pdf", "file3.pdf"]:
    merger.append(pdf)

merger.write("merged.pdf")
merger.close()

拆分PDFs

提取特定页面或范围:

from pypdf import PdfReader, PdfWriter

reader = PdfReader("input.pdf")
writer = PdfWriter()

# 提取第2-5页
for page_num in range(1, 5):
    writer.add_page(reader.pages[page_num])

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

可用包

  • pdfplumber - 文本和表格提取(推荐)
  • pypdf - PDF操作、合并、拆分
  • pdf2image - 将PDF转换为图像(需要poppler)
  • pytesseract - 用于扫描PDF的OCR(需要tesseract)

常见模式

提取并保存文本:

import pdfplumber

with pdfplumber.open("input.pdf") as pdf:
    text = "

".join(page.extract_text() for page in pdf.pages)

with open("output.txt", "w") as f:
    f.write(text)

提取表格到CSV:

import pdfplumber
import csv

with pdfplumber.open("tables.pdf") as pdf:
    tables = pdf.pages[0].extract_tables()

    with open("output.csv", "w", newline="") as f:
        writer = csv.writer(f)
        for table in tables:
            writer.writerows(table)

错误处理

处理常见PDF问题:

import pdfplumber

try:
    with pdfplumber.open("document.pdf") as pdf:
        if len(pdf.pages) == 0:
            print("PDF没有页面")
        else:
            text = pdf.pages[0].extract_text()
            if text is None or text.strip() == "":
                print("页面不包含可提取文本(可能是扫描件)")
            else:
                print(text)
except Exception as e:
    print(f"处理PDF时出错: {e}")

性能提示

  • 对于大型PDF,分批处理页面
  • 对于多个文件,使用多进程
  • 仅提取所需页面而不是整个文档
  • 使用后关闭PDF对象