pdf-tools について
抽出、生成、編集、フォーム処理、文書セキュリティを扱う、開発者向けの PDF エンジニアリングスキルです。JavaScript を中心とするライブラリに加え、用途に応じた Python やコマンドラインツールを案内します。
主な機能
- 01PDF のテキストと表の抽出
- 02HTML からの PDF 生成
- 03PDF の編集・結合・分割
- 04インタラクティブ・静的フォームへの入力
- 05PDF の暗号化・修復・墨消し
- 06署名とアーカイブ適合性の確認
活用シーン
- 01複雑な PDF から構造化データを抽出
- 02HTML や React から PDF を生成
- 03フォーム入力と既存文書の編集
- 04安全な保管やアーカイブ向けの PDF 準備
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill pdf-toolsインストール後、Claude Code で/pdf-toolsを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/ai-extraction-patterns.mdbatch-and-accessibility.mdform-filling.mdhigh-fidelity-generation.mdlegacy-utilities.md詳細
PDF ツール
抽出、生成、変更、フォーム入力、セキュリティに対応する、PDF エンジニアリングの全ライフサイクルをカバーします。JavaScript を優先したソリューション(pdf-lib、unpdf、Puppeteer)を中心に、より高度なシナリオ向けの Python/CLI ユーティリティも扱います。
使用する場面:PDF から構造化データを抽出する、HTML/React からピクセル単位で正確な PDF を生成する、既存の PDF を変更する、入力可能または入力不可のフォームに入力する、暗号化で文書を保護する場合。
使用しない場面:単純なテキストファイルの処理、PDF とは無関係な画像のみの操作、またはワープロソフトでの処理が適しているタスク。
クイックリファレンス
| タスク | ツール | ポイント |
|---|---|---|
| HTML から PDF を生成する | Puppeteer / Playwright | page.pdf() を使用します。Puppeteer では networkidle0、Playwright では networkidle を使用します |
| テキストを抽出する(軽量) | unpdf | エッジ/サーバーレス環境に対応 |
| 表を抽出する(AI) | Vision model + Zod schema | 複数列や結合セルに対応 |
| 表を抽出する(非 AI) | pdfplumber (Python) | セル境界を正確に検出 |
| 変更、結合、分割 | pdf-lib (or @pdfme/pdf-lib) | JS でバイトレベルの PDF 操作 |
| 入力可能なフォームに入力 | pdf-lib (or @pdfme/pdf-lib) | 書き込み前に AcroForm フィールドを確認 |
| 入力不可のフォームに入力 | Python annotation scripts | 視覚的な分析とバウンディングボックス注釈 |
| PDF を暗号化する | qpdf | AES-256:qpdf --encrypt user owner 256 -- |
| 破損した PDF を修復する | qpdf | qpdf input.pdf --replace-input |
| 高速なテキスト抽出(CLI) | poppler-utils | pdftotext -layout input.pdf - |
| 数千のファイルを結合する | pypdf (Python) | ヘッドレスブラウザーより軽量 |
| バッチキュー処理 | BullMQ + unpdf | Redis ベースで、再試行、並行処理、進捗追跡に対応 |
| PDF/A アーカイブ準拠 | ghostscript + verapdf | 変換には gs -dPDFA=2、検証には verapdf を使用 |
| タグ付き PDF(アクセシビリティ) | Puppeteer | tagged: true により、HTML のセマンティクスが PDF の構造タグに対応します |
| デジタル署名 | @signpdf/* | P12 証明書による PKCS#7 署名 |
| PDF の比較 | unpdf + diff / pixelmatch | バージョン間のテキスト差分またはピクセルレベルの視覚的差分 |
| 安全な墨消し | pymupdf (fitz) | apply_redactions() は視覚的なオーバーレイだけでなく、コンテンツのバイト列を削除します |
よくある間違い
| 間違い | 正しい方法 |
|---|---|
| PDF 生成にキャンバス描画コマンドを使う | HTML/CSS テンプレートと Puppeteer/Playwright を使います |
| エッジ/サーバーレス環境で Puppeteer を実行する | エッジでは unpdf を使います。Puppeteer には完全な Node.js 環境が必要です |
| 基本的なテキストパーサーで複雑なレイアウトを抽出する | 複数列のテキストには、AI 支援 OCR または pdfplumber を使います |
| PII を含む暗号化されていない PDF をパブリックストレージに保存する | 保存前に qpdf を使って AES-256 暗号化を適用します |
サーバーサイド生成で window.print() に頼る | 決定的な出力にはヘッドレスブラウザー API(page.pdf())を使います |
| 複雑なレイアウトの抽出に pypdf を使う | 複数列または重なり合うテキストには pdfplumber または AI OCR を使います |
| コンテナ化環境でフォントの埋め込みを省略する | Puppeteer で Google Fonts または WOFF2 ファイルを埋め込みます |
| フラット化された PDF フォームフィールドに書き込む | 書き込む前に pdf-lib で AcroForm フィールドを調べます |
暗号化された PDF に保守されていない pdf-lib を使う | 暗号化 PDF のサポートを追加したフォーク @cantoo/pdf-lib を使います |
委任
- PDF の構造を調べ、抽出の問題を診断する:
Exploreエージェントを使って、AcroForm フィールド、エンコーディング、メタデータを調べます - エンドツーエンドのドキュメント処理パイプラインを構築する:
Taskエージェントを使って、抽出、変換、生成のワークフローを実装します - 新しいシステムの PDF アーキテクチャを設計する:
Planエージェントを使ってツールを選び、抽出、生成、変更の方針を計画します
参考資料
- AI 抽出パターン -- ビジョンベースの表抽出、再帰的な要約、複数パスによる検証
- 高忠実度な生成 -- Puppeteer による HTML から PDF への変換、CSS 印刷のヒント、React テンプレート、ブラウザープーリング
- レガシーユーティリティ -- バッチ処理やフォレンジック作業向けの pdfplumber、pypdf、qpdf、poppler-utils
- フォーム入力 -- 入力可能なフィールドの抽出、入力不可の注釈のワークフロー、検証スクリプト
- バッチ処理とアクセシビリティ -- キューベースのバッチ処理、PDF/A 準拠、タグ付き PDF、デジタル署名、比較、墨消し
コメント
Markdown 対応