mcpField
P
pdf-generator

pdf-generator

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

pdf-generator について

JSON仕様または既存テンプレートからPDFを作成・編集する、Denoベースのスキルです。フォーム入力、オーバーレイ、結合、テキストやメタデータの抽出に対応し、文章の自動折り返しなどには制限があります。

主な機能

  1. 01JSON仕様からPDFを生成
  2. 02既存PDFのフォーム欄に入力
  3. 03テキスト、画像、図形のオーバーレイ追加
  4. 04PDFの結合とページ選択
  5. 05テキスト、メタデータ、フォーム欄の抽出
  6. 06PDFテンプレートの解析

活用シーン

  1. 01構造化データから表付きレポートを作成
  2. 02バッチ処理で申請フォームに入力
  3. 03承認印や透かしを追加
  4. 04表紙と選択したPDFページを結合

インストール

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

$npx skills add https://github.com/jwynia/agent-skills --skill pdf-generator

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

同梱ファイル

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

scripts/
analyze-template.ts
generate-from-template.ts
generate-scratch.ts

詳細

PDF ジェネレーター

このスキルを使用するタイミング

以下の場合にこのスキルを使用します:

  • データや仕様からプログラムで PDF ドキュメントを作成する
  • 動的なデータを PDF フォームに入力する
  • 既存の PDF に透かし、スタンプ、オーバーレイを追加する
  • PDF ファイルからテキストやメタデータを抽出する
  • 複数の PDF を 1 つのドキュメントに結合する
  • PDF の構造やフォームフィールドを分析する

以下の場合はこのスキルを使用しないでください:

  • ユーザーが PDF を開いて表示したい場合(標準の PDF ビューアーを使用してください)
  • テキストが流し込まれる複雑なページレイアウトが必要な場合(HTML から PDF に変換するツールを検討してください)
  • パスワードで保護された PDF を扱う場合(サポートは限定的です)
  • スキャン文書の OCR が必要な場合

前提条件

  • Deno がインストールされていること(https://deno.land/)
  • テンプレートベースの操作に使用する入力 PDF ファイル
  • ゼロから作成する場合に使用する JSON 仕様

クイックスタート

2 つの操作モード
  1. テンプレートモード:既存の PDF テンプレートを変更します

    • フォームフィールドに入力します(テキスト、チェックボックス、ドロップダウン)
    • オーバーレイを追加します(テキスト、画像、図形)
    • PDF を結合します
  2. ゼロから作成するモード: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.tsPDF からテキスト、メタデータ、フォームフィールドを抽出します--allow-read
generate-from-template.tsフォームに入力し、オーバーレイを追加して、PDF を結合します--allow-read --allow-write
generate-scratch.tsJSON 仕様から PDF を作成します--allow-read --allow-write

要素の種類(ゼロから作成するモード)

種類説明主なオプション
textテキストコンテンツx, y, text, fontSize, font, color, rotate
imagePNG/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(デフォルト)
  • HelveticaBold
  • HelveticaOblique
  • TimesRoman
  • TimesBold
  • Courier
  • CourierBold

ページサイズ

  • A4(595.28 x 841.89 ポイント)
  • Letter(612 x 792 ポイント)
  • Legal(612 x 1008 ポイント)
  • カスタム:ポイント単位の [width, height]

よくある問題と解決策

問題:フォームフィールドが見つからない

症状:フィールド名が存在しないというエラーが表示されます。

解決策:

  1. analyze-template.ts を実行して正確なフィールド名を取得します
  2. フィールド名では大文字と小文字が区別されます
  3. PDF にフォームフィールドのように見える、入力できないテキストが含まれている場合があります
問題:テキストの位置がずれる

症状:テキストが正しくない位置に表示されます。

解決策:

  • PDF の座標は左下(0,0)から始まります
  • Y は上方向に、X は右方向に増加します
  • analyze-template.ts を使用してページの寸法を確認します
問題:画像が表示されない

症状:画像のオーバーレイが表示されません。

解決方法:

  1. ファイルパスが spec.json の場所を基準とした相対パスであることを確認します
  2. 画像形式が PNG または JPEG であることを確認します
  3. 座標がページの範囲内にあることを確認します
問題:結合した PDF のページ順が正しくない

症状:ページが予期しない順序で表示されます。

解決方法:

  • prependPdfs はテンプレートの前にページを追加します
  • appendPdfs はテンプレートの後にページを追加します
  • pages 配列を使用して特定のページを選択します:[1, 3, 5]

制限事項

  • テーブルレイアウトは組み込まれていません:テーブルには列幅を手動で指定する必要があります
  • 標準フォントのみ:スクラッチモードではカスタムフォントの埋め込みはサポートされていません
  • テキストの自動流し込みなし:テキストは次のページに自動で折り返されません
  • フォームフィールドの作成は限定的:既存のフォームには入力できますが、新しいフィールドは作成できません
  • 暗号化なし:パスワード保護された PDF は作成できません
  • 基本的なグラフィックのみ:グラデーション、パターン、複雑なパスは使用できません
  • テキスト抽出:すべての PDF で完全に機能するとは限りません(PDF の構造によって異なります)

関連スキル

  • pptx-generator:PowerPoint プレゼンテーションの作成用
  • docx-generator:Word 文書の作成用
  • xlsx-generator:Excel スプレッドシートの作成用

コメント