mcpField
P
pdf

pdf

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

pdf について

PDFを扱うエージェント向けのスキルで、フォーム入力、抽出、ページ描画、文書作成の手順とスクリプトを提供します。座標や回転、結合時の注意点も扱い、変更したページの目視確認を促します。

主な機能

  1. 01PDFフォームの入力と検証
  2. 02テキストと表の抽出
  3. 03PDFの作成・結合・編集
  4. 04レイアウト確認用のページ描画
  5. 05画像座標とPDF座標の変換

活用シーン

  1. 01入力可能フォームやフラットフォームの記入
  2. 02作成・編集したPDFの確認
  3. 03スキャン文書のOCR処理
  4. 04構造を保ったPDFの結合や分割

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/appautomaton/document-skills --skill pdf

インストール後、Claude Code で/pdfを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

forms.md
ocr.md
reference.md
tables.md
scripts/
check_bounding_boxes.py
check_fillable_fields.py
convert_pdf_to_images.py
create_validation_image.py
extract_form_field_info.py
fill_fillable_fields.py
fill_pdf_form_with_annotations.py
flatten_form.py
pdf_coords.py

詳細

PDF ファイル

pypdf、pdfplumber、reportlab についてはすでにご存じでしょう。このスキルでは、それらだけではできないことを補います。入力を自己検証するフォーム入力スクリプト、読者に見えるページの状態を確認する方法、そしてコンテンツが意図せず誤った位置に配置される PDF の挙動を扱います。

スクリプトの実行

<skill> はこのファイルがあるディレクトリです。バンドルされているスクリプトは、ユーザーの作業ディレクトリから絶対パスで実行してください。そうすれば、スクリプト内のファイルへの相対パスが引き続き機能します。

uv run <skill>/scripts/convert_pdf_to_images.py report.pdf pages

作成した Python コードは、依存関係を宣言して実行してください。uv run --with pypdf script.py を使うか、PEP 723 ヘッダーを指定します。ページのレンダリングには poppler(pdftoppm)が必要です。OCR には Tesseract も必要です。

ツールの選択

タスク使用するもの
フォームへの入力(入力可能フォーム、またはフラットフォーム)forms.md を必ず使用してください。各手順に対応するスクリプトがあります。
テキストpdfplumber、またはコマンドラインの pdftotext -layout。ページ上にテキストが見えているのに抽出されない場合は、スキャン画像です。ocr.md を参照してください。
テーブルpdfplumber:tables.md を参照してください。
新しい PDF の作成reportlab:流し込み形式の文書には Platypus、正確な配置には canvas を使用します。
結合、分割、回転、切り抜き、スタンプ、暗号化pypdf:ブックマーク、リンク、向きを維持する呼び出しについては reference.md を参照してください。
ページの見た目の確認scripts/convert_pdf_to_images.py

出力の確認

PDF を作成または変更したら、必ず変更したページをレンダリングして、納品前に確認してください。テキストが表示され、読みやすいこと、切れていたり重なっていたりする箇所がないこと、すべてのスタンプや値が正しい位置にあることを確認します。

uv run <skill>/scripts/convert_pdf_to_images.py out.pdf check --pages 1-3

気づかないうちに失敗する落とし穴

  • 座標系が 2 種類あります。 PDF の座標はページ枠の左下を原点とし、単位はポイントです。pdfplumber とページ画像の座標は左上を原点とします。ページ枠の原点は (0, 0) とは限らないため、page.cropbox.left と .bottom を確認してください。
  • 回転したページ。 /Rotate は表示上のみページを回転させます。コンテンツとフォームフィールドの座標は回転前のままです。単純な拡大縮小と y 軸の反転だけで配置すると、誤った位置に置かれます。scripts/pdf_coords.py でボックスを変換し、スタンプを追加する前に page.transfer_rotation_to_content() を呼び出してください。
  • 新しい PDF の非ラテン文字。 reportlab の組み込みフォントでは、中国語やキリル文字などの文字が黒い四角で描画されます。TrueType フォントを登録して埋め込んでください。reference.md を参照してください。
  • 結合。 PdfWriter.append() はブックマークとリンクを維持しますが、add_page() でページをコピーすると、それらは失われます。同じフィールド名を持つフォームを結合すると 1 つのフィールドになるため、一方に入力すると両方に入力されます。
  • AES 暗号化には uv run --with 'pypdf[crypto]' が必要です。これがないと、pypdf は開くとき、または暗号化するときに DependencyError を発生させます。

スクリプト

スクリプト機能
check_fillable_fields.py <pdf>forms.md のどのフォーム入力手順を使うべきかを示します
extract_form_field_info.py <pdf> <out.json>入力可能なフィールド、そのページ、ボックス、受け付ける値を一覧表示します
fill_fillable_fields.py <pdf> <values.json> <out.pdf>すべての ID、ページ、値を確認してからフィールドに入力します
convert_pdf_to_images.py <pdf> <dir> [--pages] [--fields]ページを 1 ページずつ PNG にレンダリングします。必要に応じて入力可能な各フィールドの輪郭も表示します
check_bounding_boxes.py <fields.json> [pdf]フラットフォームへの入力前に、ボックスの重なりや高さ不足を検出します
create_validation_image.py <page> <fields.json> <png> <out.png>目視確認用に、ページ画像上へボックスを描画します
fill_pdf_form_with_annotations.py <pdf> <fields.json> <out.pdf>どの環境でも同じようにレンダリングされるテキストでフラットフォームに入力します
flatten_form.py <pdf> <out.pdf>入力済みの値をページに描画し、編集できないようにします
pdf_coords.py <pdf> <page> <WxH> --to-pdf/--to-image <box>ページ画像のピクセルと PDF のポイントの間でボックスを変換します

コメント