pdf-generator について
JSON仕様または既存テンプレートからPDFを作成・編集する、Denoベースのスキルです。フォーム入力、オーバーレイ、結合、テキストやメタデータの抽出に対応し、文章の自動折り返しなどには制限があります。
主な機能
- 01JSON仕様からPDFを生成
- 02既存PDFのフォーム欄に入力
- 03テキスト、画像、図形のオーバーレイ追加
- 04PDFの結合とページ選択
- 05テキスト、メタデータ、フォーム欄の抽出
- 06PDFテンプレートの解析
活用シーン
- 01構造化データから表付きレポートを作成
- 02バッチ処理で申請フォームに入力
- 03承認印や透かしを追加
- 04表紙と選択したPDFページを結合
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jwynia/ agent-skills --skill pdf-generatorインストール後、Claude Code で/pdf-generatorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
scripts/analyze-template.tsgenerate-from-template.tsgenerate-scratch.ts詳細
PDF ジェネレーター
このスキルを使用するタイミング
以下の場合にこのスキルを使用します:
- データや仕様からプログラムで PDF ドキュメントを作成する
- 動的なデータを PDF フォームに入力する
- 既存の PDF に透かし、スタンプ、オーバーレイを追加する
- PDF ファイルからテキストやメタデータを抽出する
- 複数の PDF を 1 つのドキュメントに結合する
- PDF の構造やフォームフィールドを分析する
以下の場合はこのスキルを使用しないでください:
- ユーザーが PDF を開いて表示したい場合(標準の PDF ビューアーを使用してください)
- テキストが流し込まれる複雑なページレイアウトが必要な場合(HTML から PDF に変換するツールを検討してください)
- パスワードで保護された PDF を扱う場合(サポートは限定的です)
- スキャン文書の OCR が必要な場合
前提条件
- Deno がインストールされていること(https://deno.land/)
- テンプレートベースの操作に使用する入力 PDF ファイル
- ゼロから作成する場合に使用する JSON 仕様
クイックスタート
2 つの操作モード
-
テンプレートモード:既存の PDF テンプレートを変更します
- フォームフィールドに入力します(テキスト、チェックボックス、ドロップダウン)
- オーバーレイを追加します(テキスト、画像、図形)
- PDF を結合します
-
ゼロから作成するモード:JSON 仕様を使用して PDF を一から作成します
手順
モード 1:テンプレートベースの生成
ステップ 1a:テンプレートを分析する
既存の PDF からフォームフィールドと構造を抽出します:
deno run --allow-read scripts/analyze-template.ts form-template.pdf > inventory.json
出力(inventory.json):
{
"filename": "form-template.pdf",
"pageCount": 2,
"title": "Application Form",
"author": "Company Inc",
"pages": [
{ "pageNumber": 1, "width": 612, "height": 792, "text": "..." }
],
"formFields": [
{ "name": "FullName", "type": "text", "value": "" },
{ "name": "Email", "type": "text", "value": "" },
{ "name": "AgreeToTerms", "type": "checkbox", "value": false }
],
"placeholders": [
{ "tag": "{{DATE}}", "location": "page 1", "pageNumber": 1 }
],
"hasFormFields": true
}
ステップ 1b:入力仕様を作成する
form-data.json を作成します:
{
"formFields": [
{ "name": "FullName", "value": "John Smith" },
{ "name": "Email", "value": "[email protected]" },
{ "name": "AgreeToTerms", "value": true }
],
"flattenForm": true
}
ステップ 1c:入力済み PDF を生成する
deno run --allow-read --allow-write scripts/generate-from-template.ts \
form-template.pdf form-data.json filled-form.pdf
オーバーレイの追加(透かし、スタンプ)
watermark-spec.json を作成します:
{
"overlays": [
{
"type": "text",
"page": 1,
"x": 200,
"y": 400,
"text": "CONFIDENTIAL",
"fontSize": 48,
"color": { "r": 1, "g": 0, "b": 0 },
"rotate": 45
},
{
"type": "image",
"page": 1,
"x": 450,
"y": 700,
"path": "logo.png",
"width": 100,
"height": 50
}
]
}
PDF の結合
merge-spec.json を作成します:
{
"prependPdfs": [
{ "path": "cover-page.pdf" }
],
"appendPdfs": [
{ "path": "appendix-a.pdf", "pages": [1, 2, 3] },
{ "path": "appendix-b.pdf" }
],
"excludePages": [5, 6]
}
モード 2:ゼロから作成する
ステップ 2a:仕様を作成する
spec.json を作成します:
{
"title": "Quarterly Report",
"author": "Finance Team",
"pages": [
{
"size": "A4",
"elements": [
{
"type": "text",
"x": 50,
"y": 750,
"text": "Q4 2024 Financial Report",
"fontSize": 28,
"font": "HelveticaBold",
"color": { "r": 0, "g": 0, "b": 0.5 }
},
{
"type": "line",
"startX": 50,
"startY": 740,
"endX": 550,
"endY": 740,
"thickness": 2
},
{
"type": "text",
"x": 50,
"y": 700,
"text": "Executive Summary",
"fontSize": 18,
"font": "HelveticaBold"
},
{
"type": "text",
"x": 50,
"y": 670,
"text": "This quarter showed strong growth across all divisions...",
"fontSize": 12,
"maxWidth": 500,
"lineHeight": 16
}
]
}
]
}
ステップ 2b:PDF を生成する
deno run --allow-read --allow-write scripts/generate-scratch.ts spec.json output.pdf
使用例
例 1:申請フォームに入力する
シナリオ:求人応募フォームに自動で入力します。
# 1. Analyze form to find field names
deno run --allow-read scripts/analyze-template.ts application.pdf --pretty
# 2. Create form-data.json with applicant info
# 3. Generate filled form
deno run --allow-read --allow-write scripts/generate-from-template.ts \
application.pdf form-data.json john-smith-application.pdf
例 2:承認スタンプを追加する
シナリオ:ドキュメントに「APPROVED」スタンプを追加します。
stamp-spec.json:
{
"overlays": [
{
"type": "rectangle",
"page": 1,
"x": 400,
"y": 700,
"width": 150,
"height": 50,
"color": { "r": 0.9, "g": 1, "b": 0.9 }
},
{
"type": "text",
"page": 1,
"x": 410,
"y": 720,
"text": "APPROVED",
"fontSize": 20,
"font": "HelveticaBold",
"color": { "r": 0, "g": 0.5, "b": 0 }
},
{
"type": "text",
"page": 1,
"x": 410,
"y": 705,
"text": "2024-12-15",
"fontSize": 10
}
]
}
例 3:表付きレポートを作成する
シナリオ:データ表を含むシンプルなレポートを生成します。
report-spec.json:
{
"title": "Sales Report",
"pages": [{
"size": "Letter",
"elements": [
{
"type": "text",
"x": 72,
"y": 720,
"text": "Monthly Sales Report",
"fontSize": 24,
"font": "HelveticaBold"
},
{
"type": "table",
"x": 72,
"y": 680,
"rows": [
["Product", "Units", "Revenue"],
["Widget A", "150", "$15,000"],
["Widget B", "75", "$11,250"],
["Widget C", "200", "$8,000"]
],
"columnWidths": [150, 80, 100],
"rowHeight": 25,
"headerBackground": { "r": 0.9, "g": 0.9, "b": 0.9 }
}
]
}]
}
スクリプトリファレンス
| スクリプト | 目的 | 権限 |
|---|---|---|
analyze-template.ts | PDF からテキスト、メタデータ、フォームフィールドを抽出します | --allow-read |
generate-from-template.ts | フォームに入力し、オーバーレイを追加して、PDF を結合します | --allow-read --allow-write |
generate-scratch.ts | JSON 仕様から PDF を作成します | --allow-read --allow-write |
要素の種類(ゼロから作成するモード)
| 種類 | 説明 | 主なオプション |
|---|---|---|
text | テキストコンテンツ | x, y, text, fontSize, font, color, rotate |
image | PNG/JPEG 画像 | x, y, path, width, height, opacity |
rectangle | 塗りつぶし/輪郭のみの長方形 | x, y, width, height, color, borderColor |
line | 直線 | startX, startY, endX, endY, thickness |
circle | 塗りつぶし/輪郭のみの円 | x, y, radius, color, borderColor |
table | 基本的な表レイアウト | x, y, rows, columnWidths, rowHeight |
使用可能なフォント
Helvetica(デフォルト)HelveticaBoldHelveticaObliqueTimesRomanTimesBoldCourierCourierBold
ページサイズ
A4(595.28 x 841.89 ポイント)Letter(612 x 792 ポイント)Legal(612 x 1008 ポイント)- カスタム:ポイント単位の
[width, height]
よくある問題と解決策
問題:フォームフィールドが見つからない
症状:フィールド名が存在しないというエラーが表示されます。
解決策:
analyze-template.tsを実行して正確なフィールド名を取得します- フィールド名では大文字と小文字が区別されます
- PDF にフォームフィールドのように見える、入力できないテキストが含まれている場合があります
問題:テキストの位置がずれる
症状:テキストが正しくない位置に表示されます。
解決策:
- PDF の座標は左下(0,0)から始まります
- Y は上方向に、X は右方向に増加します
analyze-template.tsを使用してページの寸法を確認します
問題:画像が表示されない
症状:画像のオーバーレイが表示されません。
解決方法:
- ファイルパスが spec.json の場所を基準とした相対パスであることを確認します
- 画像形式が PNG または JPEG であることを確認します
- 座標がページの範囲内にあることを確認します
問題:結合した PDF のページ順が正しくない
症状:ページが予期しない順序で表示されます。
解決方法:
prependPdfsはテンプレートの前にページを追加しますappendPdfsはテンプレートの後にページを追加しますpages配列を使用して特定のページを選択します:[1, 3, 5]
制限事項
- テーブルレイアウトは組み込まれていません:テーブルには列幅を手動で指定する必要があります
- 標準フォントのみ:スクラッチモードではカスタムフォントの埋め込みはサポートされていません
- テキストの自動流し込みなし:テキストは次のページに自動で折り返されません
- フォームフィールドの作成は限定的:既存のフォームには入力できますが、新しいフィールドは作成できません
- 暗号化なし:パスワード保護された PDF は作成できません
- 基本的なグラフィックのみ:グラデーション、パターン、複雑なパスは使用できません
- テキスト抽出:すべての PDF で完全に機能するとは限りません(PDF の構造によって異なります)
関連スキル
- pptx-generator:PowerPoint プレゼンテーションの作成用
- docx-generator:Word 文書の作成用
- xlsx-generator:Excel スプレッドシートの作成用
コメント
Markdown 対応