pdf-toolkit について
標準ライブラリのみでPDFのメタデータとセキュリティ指標を調べるスキルです。文書の受け渡し、受信PDFの一次確認、フォルダー単位の監査に使えますが、テキスト抽出や復号には対応しません。
主な機能
- 01PDFのバージョン、容量、ページ数の確認
- 02文書およびXMPメタデータの読み取り
- 03暗号化とJavaScriptの指標を検出
- 04埋め込みファイルの指標を検出
- 05JSON出力に対応
活用シーン
- 01外部共有前のメタデータ確認
- 02受信PDFのセキュリティ一次確認
- 03送付予定PDFのフォルダー単位監査
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ borghei/ claude-skills --skill pdf-toolkitインストール後、Claude Code で/pdf-toolkitを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/pdf_handoff_checklist.mdreferences/pdf_handoff_guide.mdscripts/pdf_auditor.py詳細
PDF ツールキット
標準ライブラリのみを使用して、.pdf ファイルのメタデータ、ページ数、暗号化状態、埋め込み JavaScript、埋め込みファイル、PDF バージョンを監査します。
目次
キーワード
PDF、PDF 監査、PDF メタデータ、PDF レビュー、PDF 情報漏えい、PDF セキュリティ、墨消し、ドキュメントの引き渡し
まず確認すること
監査を実行する前に、以下の入力内容を確認してください。不明または曖昧なものがあれば、推測せずに質問してください。
- 監査の目的(引き渡し前のメタデータ削除、受信時のセキュリティトリアージ、一括送信前チェック) — 3 つのワークフローのどれを使い、どのフィールドを確認するかを決めます
- 受信者/取り扱い状況(外部の相手、管理対象のノート PC) — 何を情報漏えい、または隔離に値する脅威とみなすかを決めます
- 正当なメタデータとして想定される内容(作成者/タイトルの正しい値) — これがないと、情報漏えいと想定内のデータを区別できません
停止ルール:出力に最も影響する 2~3 項目だけを質問してください。ユーザーが「とりあえず下書きして」と言った場合は、作業を進め、成果物の冒頭に前提条件を列挙してください。
クイックスタート
python scripts/pdf_auditor.py contract.pdf
出力:PDF バージョン、ページ数、ファイルサイズ、メタデータ(Author、Title、Producer、Creator、日付)、暗号化状態、埋め込み JavaScript の有無、埋め込みファイルの有無。
主なワークフロー
ワークフロー 1:引き渡し前の PDF メタデータ監査
目的: PDF を外部の相手に渡す際に、作成者の身元、以前のクライアント名、ドキュメントの履歴が漏れるのを防ぎます。
手順:
- 実行します:
python scripts/pdf_auditor.py document.pdf - メタデータフィールドを確認します:
Authorが送信者と一致している(以前のプロジェクトの「Bob's intern」ではない)Titleがドキュメントの内容と一致している(以前の作業タイトルが残っていない)Producerに社内専用の PDF ツールが表示されていないCreationDateとModDateが取引の時期として妥当である
- メタデータから情報が漏れている場合は、プロパティを整理して元ファイルから再エクスポートします(または墨消しツールを使用します)
所要時間: 1 ドキュメントあたり 2~3 分。
ワークフロー 2:PDF セキュリティトリアージ
目的: 受信した PDF を管理対象のノート PC で安全に開けるかどうかを判断します。
手順:
- 監査を実行します
- JavaScript の有無が検出された場合 → 隔離し、サンドボックスで確認します
- 埋め込みファイルの有無が検出された場合 → ファイル形式の一覧を確認します。想定外のものがあれば隔離します
- 暗号化されており、空ではない所有者パスワードが設定されている場合 → 別の連絡手段で送信者にパスワードを求めます
- 判断します:開く/隔離する/拒否する
所要時間: 受信したドキュメント 1 件あたり 1~2 分。
ワークフロー 3:送信前のドキュメント一式の一括監査
目的: 顧客またはパートナーに ZIP ファイルで送る前に、フォルダー内のすべての PDF を監査します。
手順:
- ループ処理します:
for f in *.pdf; do python scripts/pdf_auditor.py "$f" --json; done > audit.jsonl - JSON Lines を解析し、メタデータの漏えいや異常がないか確認します
- 問題のあるファイルを元ファイルから再エクスポートします
- 問題がなくなるまで監査を再実行します
所要時間: 1 ファイルあたり 1~2 分。
ツール
pdf_auditor.py
標準ライブラリによる解析で PDF を読み取ります。pypdf や pdfplumber は不要です。以下を検出します。
- PDF バージョン(ヘッダーから取得)
- ページ数(
/Type /Pageオブジェクトをスキャン) - ファイルサイズ
- ドキュメント情報/XMP メタデータ(Title、Author、Subject、Keywords、Producer、Creator、CreationDate、ModDate)
- 暗号化状態(
/Encrypt参照の有無) - JavaScript の有無(
/JS、/JavaScript、/AAキー) - 埋め込みファイルの有無(
/EmbeddedFiles)
python scripts/pdf_auditor.py document.pdf
python scripts/pdf_auditor.py document.pdf --json
制限事項:
- テキストコンテンツは抽出しません。標準ライブラリだけで PDF のテキストを抽出する方法は信頼性に欠けます。テキストを抽出するには、別途
pdfplumberまたはpypdfをインストールしてください。 - 暗号化されたファイルは復号できません。
- JavaScript/埋め込みファイルの有無のみを検出し、その動作は検出しません。
リファレンスガイド
references/pdf_handoff_guide.md— 外部送信前に PDF から削除すべき情報、PDF/A と PDF/UA の基本、よくある情報漏えいのパターン
テンプレート
assets/pdf_handoff_checklist.md— 送付前のPDF承認チェックリスト
ベストプラクティス
- 墨消しではなく、再エクスポートしてください。 コンテンツを「削除」する墨消しツールでは、復元可能な状態で情報が残ることがあります。最も安全なのは、機密フィールドを削除したうえで、元の文書からPDFを再生成することです。
- 文書のプロパティは元のファイルで削除してください。 Wordの場合:ファイル → ドキュメントの検査 → ドキュメント検査。Pagesの場合:ファイル → プロパティ。その後、PDFにエクスポートします。
- ファイル名を信用しないでください。
Public-Report.pdfという名前のファイルにも、人の目では見分けられない非公開のメタデータが含まれていることがあります。 - 長期保存にはPDF/Aを使用してください。 PDF/AはJavaScriptと外部依存関係を除去するため、文書の長期保存に適しています。
連携ポイント
legal/と連携して、墨消し済み契約書を引き渡しますc-level-advisor/board-deck-builderと連携して、取締役会資料を引き渡しますmarketing/でホワイトペーパーや導入事例を引き渡す際に使用します