mcpField
P
pdf

pdf

github.com/stvlynn文档处理121123 次安装32 周前更新
代码仓库

关于 pdf

pdf 是用于 PDF 文档处理的技能,面向需要提取数据、创建文档或操作表单的用户。它涵盖文本和表格提取、PDF 创建、合并拆分及表单填写,并要求验证输出。

主要功能

  1. 01提取文本和表格并导出数据
  2. 02创建含文本与图表的 PDF
  3. 03合并、拆分和旋转 PDF
  4. 04查看并填写 PDF 表单
  5. 05批量处理多个 PDF

适用场景

  1. 01提取 PDF 表格并导出为 Excel 或 CSV
  2. 02制作报告、证书或发票 PDF
  3. 03合并或逐页拆分文档
  4. 04填写申请表等 PDF 表单

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/stvlynn/dingtalk-wukong-skills --skill pdf

安装后在 Claude Code 中输入/pdf确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

requirements.txt
docs/
00-SKILL-完整处理指南.md
forms.md
pdf_to_word_conversion_guide.md
reference.md

详细介绍

PDF文档处理专家 Real Skill

一句话说明

全面的 PDF 文档处理工具,支持文本表格提取、PDF 创建、文档操作和表单填写。

PDF 处理指南——全面的 PDF 操作工具包,可用于提取文本和表格、创建新的 PDF、合并/拆分文档以及处理表单。


使用场景

适用:

  • 从 PDF 提取文本、表格数据并导出 Excel
  • 创建新的 PDF 文档(报告、证书、发票)
  • 合并、拆分、旋转 PDF 文档
  • 填写 PDF 表单(政府表单、申请表)
  • 批量处理多个 PDF 文件

不适用:

  • 扫描版 PDF(需先进行 OCR 处理)
  • 复杂的 PDF 编辑(使用专业软件)

核心流程

用户需求 → 判断任务类型 → 选择工具 → 执行操作 → 验证输出
User request → Task type classification → Tool selection → Execute → Validate

任务类型判断:

提取数据
  • 文本提取 → pdfplumber.extract_text()
    • 文本提取精度优于 pypdf
  • 表格提取 → pdfplumber.extract_tables() + pandas
    • 智能识别表格结构
    • 导出为 Excel、CSV、JSON
创建 PDF
  • 简单文档 → reportlab.pdfgen.canvas
    • 快速创建包含文本和图形的文档
  • 复杂布局 → reportlab.platypus
    • 支持段落、表格、图像及高级样式
PDF 操作
  • 合并 → pypdf.PdfWriter
    • 将多个 PDF 合并为一个
  • 拆分 → pypdf.PdfWriter(将每页分别保存)
  • 旋转 → page.rotate()
  • 元信息 → pypdf.PdfReader.metadata / PdfWriter.add_metadata()
表单处理
  • 查看字段 → 参见 forms.md
  • 填写表单 → 参见 forms.md
  • 批量处理 → 循环 + 表单填写 API

任务完成标准

必须满足(缺一不可):

  • PDF 文件可正常打开
  • 提取的数据完整准确
  • 表格结构保留正确(行列对应)
  • 创建的 PDF 内容清晰可读

质量评级:

  • ⭐⭐⭐⭐⭐ 优秀 - 数据完整 + 格式规范 + 自动化批处理
  • ⭐⭐⭐ 及格 - 数据正确 + PDF 可用
  • ⭐ 失败 - 数据缺失或 PDF 损坏

参考资料(供 AI 使用)

类型路径说明
核心文档docs/00-SKILL-完整处理指南.md完整的 PDF 处理指南(约 300 行)
表单处理docs/forms.mdPDF 表单填写详细教程
高级参考docs/reference.mdJavaScript 库和高级功能

关键原则(AI 必读)

1. 提取时优先使用 pdfplumber
  • 文本提取:精度高于 pypdf
  • 表格识别:表格识别能力强
  • 布局保留:保留布局信息
  • 复杂 PDF:更适合处理复杂 PDF
2. 表格数据规范化
# Best practice for table extraction
import pdfplumber
import pandas as pd

all_tables = []
with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        tables = page.extract_tables()
        for table in tables:
            if table:  # Check not empty
                df = pd.DataFrame(table[1:], columns=table[0])  # First row as header
                all_tables.append(df)

# Combine and clean
combined = pd.concat(all_tables, ignore_index=True)
combined.to_excel("output.xlsx", index=False)
3. 扫描版 PDF 需要 OCR
  • 识别:如果文本提取结果为空或是乱码
  • 处理:必须先使用 OCR 工具(Tesseract、Adobe Acrobat 等)
  • 告知用户:明确告知用户需要进行 OCR 预处理
4. 大文件内存管理
  • 批量处理多个 PDF
  • 按顺序逐页处理,而不是一次性加载整个文档
  • 尽可能使用生成器

快速命令参考

文本提取
import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)
表格转 Excel
import pdfplumber
import pandas as pd

all_tables = []
with pdfplumber.open("document.pdf") as pdf:
    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)

combined = pd.concat(all_tables, ignore_index=True)
combined.to_excel("extracted_tables.xlsx", index=False)
合并 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)
拆分 PDF
from pypdf import PdfReader, PdfWriter

reader = PdfReader("large_document.pdf")
for i, page in enumerate(reader.pages):
    writer = PdfWriter()
    writer.add_page(page)
    with open(f"page_{i+1}.pdf", "wb") as output:
        writer.write(output)
创建 PDF
from reportlab.lib.pagesizes import letter
from reportlab.pdfgen import canvas

c = canvas.Canvas("hello.pdf", pagesize=letter)
width, height = letter
c.drawString(100, height - 100, "Hello World!")
c.save()
提取元信息
from pypdf import PdfReader

reader = PdfReader("document.pdf")
meta = reader.metadata
print(f"Title: {meta.title}")
print(f"Author: {meta.author}")
print(f"Pages: {len(reader.pages)}")

依赖安装

Python 依赖
pip install -r requirements.txt
# Includes: pypdf, pdfplumber, reportlab, pandas, openpyxl

常见场景示例

场景 1:批量提取发票表格
import pdfplumber
import pandas as pd
import glob

all_data = []
for pdf_file in glob.glob("invoices/*.pdf"):
    with pdfplumber.open(pdf_file) as pdf:
        for page in pdf.pages:
            tables = page.extract_tables()
            for table in tables:
                if table:
                    df = pd.DataFrame(table[1:], columns=table[0])
                    df['source_file'] = pdf_file
                    all_data.append(df)

combined = pd.concat(all_data, ignore_index=True)
combined.to_excel("all_invoices.xlsx", index=False)
场景 2:生成带表格的报告
from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
from reportlab.lib.styles import getSampleStyleSheet

doc = SimpleDocTemplate("report.pdf", pagesize=letter)
styles = getSampleStyleSheet()
story = []

# Title
story.append(Paragraph("Sales Report", styles['Title']))

# Table
data = [
    ['Product', 'Q1', 'Q2', 'Q3', 'Q4'],
    ['Product A', '1000', '1200', '1100', '1300'],
    ['Product B', '800', '900', '950', '1000']
]
t = Table(data)
t.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), 'grey'),
    ('TEXTCOLOR', (0, 0), (-1, 0), 'white'),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('GRID', (0, 0), (-1, -1), 1, 'black')
]))
story.append(t)

doc.build(story)

评论

支持 Markdown