mcpField
P
pdf

pdf

github.com/stvlynnドキュメント121123 回インストール32 週間前に更新
リポジトリ

pdf について

pdfは、データ抽出、文書作成、フォーム処理を行うユーザー向けのPDF処理スキルです。テキストや表の抽出、PDF作成、結合・分割、フォーム入力に対応し、出力の検証も扱います。

主な機能

  1. 01テキストと表を抽出してデータ出力
  2. 02テキストや図を含むPDFの作成
  3. 03PDFの結合、分割、回転
  4. 04PDFフォームの確認と入力
  5. 05複数PDFの一括処理

活用シーン

  1. 01PDFの表を抽出して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 Processing Guide - テキストや表の抽出、新しい PDF の作成、文書の結合・分割、フォームの処理に対応した包括的な PDF 操作ツールキットです。


使用シーン

適しています:

  • PDF からテキストや表データを抽出し、Excel にエクスポートする
  • 新しい PDF 文書(レポート、証明書、請求書)を作成する
  • PDF 文書を結合、分割、回転する
  • PDF フォーム(政府機関のフォーム、申請書)に入力する
  • 複数の PDF ファイルを一括処理する

適していません:

  • スキャンされた PDF(先に OCR 処理が必要です)
  • 複雑な PDF の編集(専用ソフトウェアを使用してください)

コアプロセス

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

タスクの種類を判断する(Task Classification):

データの抽出(Extracting Data)
  • テキスト抽出(Text extraction) → pdfplumber.extract_text()
    • テキスト抽出の精度は pypdf より高いです
  • 表の抽出(Table extraction) → pdfplumber.extract_tables() + pandas
    • インテリジェントな表構造認識
    • Excel、CSV、JSON へのエクスポート
PDF の作成(Creating PDFs)
  • シンプルな文書(Simple documents) → reportlab.pdfgen.canvas
    • テキストとグラフィックを使って文書をすばやく作成します
  • 複雑なレイアウト(Complex layouts) → reportlab.platypus
    • 高度なスタイル設定を使用した段落、表、画像
PDF 操作(PDF Operations)
  • 結合(Merge) → pypdf.PdfWriter
    • 複数の PDF を 1 つにまとめます
  • 分割(Split) → pypdf.PdfWriter(各ページを個別に保存)
  • 回転(Rotate) → page.rotate()
  • メタデータ(Metadata) → pypdf.PdfReader.metadata / PdfWriter.add_metadata()
フォーム処理(Form Processing)
  • フィールドの表示(View fields) → forms.md を参照してください
  • フォームへの入力(Fill forms) → forms.md を参照してください
  • 一括処理(Batch processing) → ループ + フォーム入力 API

タスク完了基準

必須条件(すべて満たす必要があります):

  • PDF ファイルが正常に開ける
  • 抽出したデータが完全かつ正確である
  • 表の構造が正しく保持されている(行と列が対応している)
  • 作成した PDF の内容が明瞭で読みやすい

品質評価:

  • ⭐⭐⭐⭐⭐ 優秀 - データが完全 + 書式が適切 + 自動一括処理
  • ⭐⭐⭐ 合格 - データが正確 + PDF が使用可能
  • ⭐ 失敗 - データが欠落、または PDF が破損

参考資料(AI 向け)

種類パス説明
コアドキュメントdocs/00-SKILL-完整处理指南.mdPDF 処理の包括的なガイド(約 300 行)
フォーム処理docs/forms.mdPDF フォーム入力の詳細なチュートリアル
高度なリファレンスdocs/reference.mdJavaScript ライブラリと高度な機能

重要な原則(AI 必読 / Critical Principles)

1. 抽出には pdfplumber を優先する(Prefer pdfplumber for Extraction)
  • テキスト抽出:pypdf より高精度です
  • 表の認識:表の認識能力に優れています
  • レイアウトの保持:レイアウト情報を保持します
  • 複雑な PDF:複雑な PDF の処理に適しています
2. 表データの正規化(Table Data Normalization)
# 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 が必要です(Scanned PDFs Require OCR)
  • 判定:テキスト抽出の結果が空、または文字化けしている場合
  • 処理:まず OCR ツール(Tesseract、Adobe Acrobat など)を使用する必要があります
  • ユーザーへの通知:OCR による前処理が必要であることを、ユーザーにはっきりと伝えてください
4. 大容量ファイルのメモリ管理(Memory Management for Large Files)
  • 複数の PDF は一括処理します
  • 文書全体を読み込むのではなく、ページを順番に処理します
  • 可能な場合はジェネレーターを使用します

クイックコマンドリファレンス(Quick Commands)

テキスト抽出(Text Extraction)
import pdfplumber

with pdfplumber.open("document.pdf") as pdf:
    for page in pdf.pages:
        text = page.extract_text()
        print(text)
表を Excel に変換(Table to 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 の結合(Merge PDFs)
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 の分割(Split 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 の作成(Create 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()
メタデータの抽出(Extract Metadata)
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)}")

依存関係のインストール(Dependencies Installation)

Python の依存関係
pip install -r requirements.txt
# Includes: pypdf, pdfplumber, reportlab, pandas, openpyxl

よくあるシナリオの例(Common Scenarios)

シナリオ 1:請求書の表を一括抽出する(Batch Extract Invoice Tables)
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:表付きのレポートを作成する(Create Report with Table)
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)

コメント