关于 PDF Processing
PDF Processing 是面向 PDF 处理任务的技能,介绍使用 Python 包提取文本和表格、填写表单、合并与拆分文件,并支持图像转换和 OCR。
主要功能
- 01提取多页文本
- 02检测并提取表格
- 03填写并验证表单
- 04合并与拆分 PDF
- 05转换页面图像并进行 OCR
适用场景
- 01提取报告文本供后续处理
- 02将 PDF 表格导出为 CSV
- 03合并或拆分 PDF 文档
- 04使用 OCR 处理扫描页面
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ davila7/ claude-code-templates --skill pdf-processing安装后在 Claude Code 中输入/pdf-processing确认已加载。
附带文件FORMS.md
详细介绍
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() + "\n\n"
print(full_text)
填写表单
如需填写 PDF 表单,请参阅 FORMS.md,了解完整指南,包括字段分析和验证。
合并 PDF
合并多个 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()
拆分 PDF
提取特定页面或页面范围:
from pypdf import PdfReader, PdfWriter
reader = PdfReader("input.pdf")
writer = PdfWriter()
# Extract pages 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 = "\n\n".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 has no pages")
else:
text = pdf.pages[0].extract_text()
if text is None or text.strip() == "":
print("Page contains no extractable text (might be scanned)")
else:
print(text)
except Exception as e:
print(f"Error processing PDF: {e}")
性能提示
- 对于较大的 PDF,分批处理页面
- 对多个文件使用多进程处理
- 仅提取所需页面,而不是整个文档
- 使用后关闭 PDF 对象
评论
支持 Markdown