mcpField
P
pdf-processing

pdf-processing

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

pdf-processing について

元ファイルを保持しながらPDFを調査・処理し、結果を検証するエージェント向けスキルです。抽出や編集、変換に加え、安全上の制約と根拠に基づく成果物の提出を扱います。

主な機能

  1. 01PDFの構造とメタデータの確認
  2. 02利用可能な機能に応じたツール選択
  3. 03PDFの抽出・結合・分割・変換
  4. 04墨消しと暗号化の慎重な処理
  5. 05内容と描画ページの検証

活用シーン

  1. 01スキャン文書からテキストを抽出
  2. 02指定したページ順でPDFを結合
  3. 03共有前にPDFの識別情報を墨消し

インストール

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

$npx skills add https://github.com/seb1n/awesome-ai-agent-skills --skill pdf-processing

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

同梱ファイル

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

agents/
openai.yaml
assets/
processing-record-template.md
references/
tool-routing.md
verification-checklist.md
scripts/
inspect_pdf.py

詳細

PDF 処理

元のファイルを保持し、実際に利用可能なツールから選択して、ドキュメントの構造とレンダリング後の見た目の両方を確認します。

入力

次の情報を収集するか、明示してください。

  • ソースファイル、依頼された操作、保存先、命名規則、ページの順序や範囲。
  • レイアウトの忠実性、検索可能なテキスト、ファイルサイズ、アクセシビリティ、アーカイブ品質、印刷出力のうち、何を優先するか。
  • OCR の言語、表や画像の要件、フォームフィールド、注釈、ブックマーク、リンク、メタデータに関する期待。
  • 承認済みの安全なチャネルを通じて提供されたパスワードや署名用認証情報。チャットで秘密鍵を要求しないでください。
  • コンテンツが機密情報かどうか、およびローカルのみでの処理が必要かどうか。

人間向けのページラベルは、0 始まりまたは 1 始まりの物理ページ番号と異なる場合があります。曖昧なページ参照は明確にしてください。

出力要件

次のものを返してください。

  1. 明示したパスに新しい出力ファイルを作成します。ソースを黙って上書きしてはいけません。
  2. 判定可能な場合は、ソースと出力の SHA-256 ハッシュ、バイトサイズ、ページ数、暗号化の状態。
  3. 簡潔な操作ログ:使用したツール、オプション、ページの対応関係、OCR 言語、墨消し、メタデータの変更。
  4. 構造、内容、レンダリング後の見た目に関する検証の根拠と制限事項。
  5. パスワード、署名、アクセシビリティ、フォント、OCR、アクティブコンテンツに関する注意事項。

確認がヒューリスティックであった場合や、ページをレンダリングできなかった場合に、完全に正確だと主張してはいけません。

ワークフロー

1. 保持と検査
  • 正確な入力パスを特定し、変更前にハッシュを計算します。
  • 新しいファイルまたは一時作業コピーに書き込みます。唯一のソースをその場で編集してはいけません。
  • このスキルディレクトリにある、依存関係不要の構造検査ツールを実行します。
python3 scripts/inspect_pdf.py /path/to/input.pdf --pretty
python3 scripts/inspect_pdf.py /path/to/input.pdf --output /path/to/report.json --pretty

この既定のスキャンは、PDF パーサーを呼び出さずにバイト列を読み取ります。--output を指定すると、入力の別名や通常ファイルではない出力先を拒否し、同じディレクトリにある一時ファイルを介してレポートをアトミックに作成または置換します。--deep は、ファイルが解析できる程度に信頼できる場合、またはステップ 2 の信頼できない入力向けサンドボックスプロファイルが検証済みの場合にのみ使用してください。判断を明示してください。

python3 scripts/inspect_pdf.py /path/to/input.pdf --deep --trust-level trusted --pretty
python3 scripts/inspect_pdf.py /path/to/untrusted.pdf --deep --sandbox-profile-confirmed --pretty

JavaScript、起動アクション、自動アクション、埋め込みファイル、リッチメディアは、動作させない危険要素として扱ってください。有効化してはいけません。

2. 利用可能なツールチェーンを選択する

方法を選ぶ前に、インストール済みのツールとライブラリを確認します。機能に基づく振り分けと代替動作については、tool-routing.md を参照してください。必要な機能を保持できるツールを優先します。テキスト抽出ツールはページ編集ツールではなく、ラスタライズは編集可能な形式への忠実な変換ではありません。

信頼できない PDF は、使い捨ての低権限サンドボックス内でのみ解析またはレンダリングしてください。サンドボックスには、シークレットやネットワークへのアクセスがなく、ソースが読み取り専用でマウントされ、一時ファイルと出力用ストレージが分離され、CPU、メモリ、プロセス、ファイルサイズ、ページ数、実行時間に制限があり、ホストのビューアー、シェル、URL ハンドラー、クリップボードとの連携がないことが必要です。パーサー/レンダラーは、JavaScript、OpenAction/追加アクション/起動アクション、フォーム送信、外部 URI の取得、添付ファイルの抽出/オープン、リッチメディア、自動的なフォント/リソースのダウンロードを無効にするよう設定してください。これらの制御が、使用する正確なツールとバージョンで有効であることを確認します。利用可能なパーサーまたはレンダラーがこのプロファイルを満たせない場合は、バイト列の検査までで停止し、機能上の不足を報告してください。

適切な依存関係がない場合は、不足している機能を説明し、インストール方法または代替ワークフローを提案してください。許可なくソフトウェアをインストールしたり、PDF をアップロードしたりしてはいけません。

3. 見た目と内容のベースラインを確立する

レイアウトに影響する変更を加える前に、信頼できるオリジナルを信頼できるローカルビューアーで開くか、レンダリングします。信頼できないオリジナルの場合は、手順 2 で検証済みのサンドボックスプロファイルのみを使用します。利用できない場合は、解析もレンダリングもせずに中止します。代表的なページと、変更するすべてのページを確認します。ページ数、寸法と向き、検索可能なテキストの有無、フォームフィールド、注釈、ブックマーク、添付ファイル、暗号化の有無、および明らかなフォントや画像の問題を記録します。

スキャンされたページについては、OCR が必要かどうかを判断します。ユーザーが破壊的なクリーンアップを明示的に依頼していない限り、元の画像レイヤーを保持します。

4. 変換を最小限に抑える
  • **抽出:**読み取り順序に不確実性がある場合はそれを保持し、ページ参照、表の構造、OCR の信頼度を維持します。欠落したテキストを捏造しないでください。
  • **結合/分割/並べ替え/回転:**ページの対応関係を明示し、必要に応じてブックマーク、ラベル、フォーム、メタデータを保持します。
  • **作成/変換:**フォントを意図的に埋め込むか置き換えます。ページサイズ、余白、リンク、見出し、アクセシビリティに関する要件を定義します。
  • **入力/注釈:**注釈とページコンテンツにフラット化された要素を区別し、有用であれば編集可能なコピーを保持します。
  • **墨消し:**色付きの四角形ではなく、オブジェクトレベルで正しく墨消しします。対象範囲に応じて、元のテキストや画像、関連するメタデータ、コメント、添付ファイル、非表示レイヤーを削除します。増分保存を無効にして、新しい PDF を完全に書き換えて保存します。出力に以前のリビジョン、元のオブジェクトストリーム、追加された過去のバイト列を残さないでください。
  • **圧縮:**画質の劣化とテキストの検索可能性の変化を測定します。許可されていない限り、非可逆のラスタライズを避けます。
  • **暗号化/署名:**アルゴリズム、権限、身元、鍵の取り扱いを確認します。署名後に変更を加えると、署名が無効になることがあります。

一時的な出力を使用し、検証が完了してから最終的に指定されたパスへ移動またはコピーします。

5. 構造と内容を検証する

verification-checklist.md に従います。最低限、次の項目を確認します。

  • 可能であれば、独立したリーダーまたはパーサーで出力を再度開きます。
  • マジックバイト、EOF マーカー、ページ数と順序、寸法、暗号化、想定されるメタデータを確認します。
  • 変更されないはずの内容について、抽出したテキストまたは OCR 結果をページごとに比較します。
  • 該当する場合は、フォームの値、ブックマーク、リンク、注釈、添付ファイル、署名を確認します。
  • 墨消しの場合は、抽出したテキストを検索し、ページオブジェクトまたは別のパーサーを検査します。見た目で隠れていることだけでは不十分です。出力が完全に書き換えられ、増分リビジョンが残っておらず、元のバイト列や墨消し対象のオブジェクトが保持されていないことを確認します。
6. レンダリングして確認する

適用される信頼/サンドボックスプロファイルのもとで、変更したすべてのページと、変更していないページから選んだ代表的なサンプルをレンダリングします。読みやすい解像度で、クリッピング、グリフの欠落、表のずれ、画像の破損、空白ページ、誤った回転、墨消し漏れを確認します。短い文書や重要度の高い文書では、すべてのページを確認します。信頼性の分類とアクティブコンテンツの制御で許可されている場合に限り、最終ファイルをユーザーが使用するビューアーで開きます。

7. 証跡を添えて納品する

複雑な作業や規制対象の作業では、processing-record-template.md を使用します。出力パス、ハッシュ、実施した検証、失敗した項目、未テストの動作を報告します。一時的な成果物は必要な期間だけ保持し、許可を得た場合に限り削除します。

安全性と権限の境界

  • ユーザーが特定のサービスとデータの取り扱いを明示的に承認しない限り、機密性の高い PDF はローカルに保管してください。
  • 埋め込みスクリプト、起動アクション、マクロ、メディア、添付ファイルは実行しないでください。
  • パスワード、アクセス制御、デジタル著作権、署名を回避しないでください。
  • パスワード、秘密鍵、個人データ、文書の内容をログに記録しないでください。
  • 真の墨消し、署名の適用、フォームの送信、公開は、明示的な範囲指定が必要な影響の大きい操作として扱ってください。
  • 法務、医療、財務、本人確認に関するデータについて、OCR を確定情報として扱わないでください。人による確認を必須としてください。
  • 該当する検証ツールと証拠がない限り、PDF/A、PDF/UA、アクセシビリティ、証拠能力、署名に関する適合性を主張しないでください。

復旧

処理に失敗した場合は、元ファイルと失敗した出力を別々に保管し、正確なコマンド/ツール/バージョンとエラーを記録して、変更していない元ファイルから再試行してください。不具合の発見前に出力が配布されていた場合は、影響を受けるバージョンと配布先を特定します。ただし、許可なくファイルを回収または差し替えてはいけません。墨消し情報の漏えい、または署名/鍵の漏えいが疑われる場合は、配布を停止し、直ちにエスカレーションしてください。

例

スキャンされた契約書からテキストを抽出する

依頼:「38 ページのスキャンされた契約書から、ページ参照付きの検索可能なテキストを抽出してください。」

元ファイルのハッシュを取得してレンダリングし、指定された言語で OCR を実行します。PDF の画像レイヤーを保持し、すべてのページで氏名/数値を抜き取り確認し、信頼度の低い箇所にフラグを付けます。物理ページ番号の参照と OCR の制限に関する注記を添えて、テキストを納品します。

取締役会資料を結合する

依頼:「この 5 つの PDF を議題の順に結合し、ブックマークを追加してください。」

順序とページ対応を確認し、新しいファイルに結合します。向きとページサイズを維持し、ブックマークを追加して、2 つ目のビューアーで再度開きます。境界となるページをレンダリングし、最終的なページ数とハッシュを報告します。

顧客識別情報を墨消しする

依頼:「この PDF を公開する前に、口座番号を削除してください。」

識別情報のパターンと該当するすべてのページを定義し、コピーに真の墨消しを適用します。対象範囲のメタデータ/コメント/添付ファイルを削除し、独立したパーサーで検索と検査を行います。墨消ししたすべてのページをレンダリングし、見た目だけの黒塗りを使用していないことを明記します。

コメント