Pdf Generator

作者 jwyniae02ec7e226a6MIT168 個星標收錄於 2026年10月8日更新於 2026年10月8日儲存庫7 個月前更新

Create and manipulate PDF files programmatically. Use when the user needs to generate PDFs, fill PDF forms, extract PDF content, add watermarks/overlays, or merge documents. Supports both template-based generation (form filling, overlays) and from-scratch creation. Keywords: PDF, document, form, fillable, merge, watermark, extract, text, report.

包含腳本Documents & Office
AI 產生的概覽

建立與操作 PDF 檔案:填寫表單、加入覆蓋層、合併文件,並依 JSON 規格產生 PDF。

功能
透過三個 Deno 指令碼產生與修改 PDF 文件。它能分析既有 PDF 以擷取文字、中繼資料與表單欄位,填寫表單欄位並加入文字或圖片覆蓋層,合併或調整頁面順序,並依 JSON 規格建立包含文字、圖片、圖形與表格的新 PDF。輸出為 PDF 檔案,以及選用的範本 JSON 清單。
適用情境
適用於需要以程式化方式產生或修改 PDF 的情境,例如填寫可填寫表單、蓋上浮水印或核准標記、合併文件,或依結構化資料產生報告。不適合用於檢視 PDF、掃描檔 OCR 或複雜的流動式頁面排版。
執行需求
需要安裝 Deno,並具備讀取與寫入權限。範本操作需要輸入 PDF 檔案;從零產生需要 JSON 規格。隨附三個可執行的 TypeScript 指令碼。

PDF Generator

When to Use This Skill

Use this skill when:

  • Creating PDF documents programmatically from data or specifications
  • Filling PDF forms with dynamic data
  • Adding watermarks, stamps, or overlays to existing PDFs
  • Extracting text and metadata from PDF files
  • Merging multiple PDFs into one document
  • Analyzing PDF structure and form fields

Do NOT use this skill when:

  • User wants to open/view PDFs (use native PDF viewer)
  • Complex page layout with flowing text is needed (consider HTML-to-PDF tools)
  • Working with password-protected PDFs (limited support)
  • OCR is needed for scanned documents

Prerequisites

  • Deno installed (https://deno.land/)
  • Input PDF files for template-based operations
  • JSON specification for scratch generation

Quick Start

Two Modes of Operation

  1. Template Mode: Modify existing PDF templates

    • Fill form fields (text, checkbox, dropdown)
    • Add overlays (text, images, shapes)
    • Merge and combine PDFs
  2. Scratch Mode: Create PDFs from nothing using JSON specifications

Instructions

Mode 1: Template-Based Generation

Step 1a: Analyze the Template

Extract form fields and structure from an existing PDF:

bash
deno run --allow-read scripts/analyze-template.ts form-template.pdf > inventory.json

Output (inventory.json):

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}
Step 1b: Create Fill Specification

Create form-data.json:

json
{  "formFields": [    { "name": "FullName", "value": "John Smith" },    { "name": "Email", "value": "[email protected]" },    { "name": "AgreeToTerms", "value": true }  ],  "flattenForm": true}
Step 1c: Generate Filled PDF
bash
deno run --allow-read --allow-write scripts/generate-from-template.ts \  form-template.pdf form-data.json filled-form.pdf

Adding Overlays (Watermarks, Stamps)

Create watermark-spec.json:

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    }  ]}

Merging PDFs

Create merge-spec.json:

json
{  "prependPdfs": [    { "path": "cover-page.pdf" }  ],  "appendPdfs": [    { "path": "appendix-a.pdf", "pages": [1, 2, 3] },    { "path": "appendix-b.pdf" }  ],  "excludePages": [5, 6]}

Mode 2: From-Scratch Generation

Step 2a: Create Specification

Create spec.json:

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        }      ]    }  ]}
Step 2b: Generate PDF
bash
deno run --allow-read --allow-write scripts/generate-scratch.ts spec.json output.pdf

Examples

Example 1: Fill Application Form

Scenario: Automatically fill a job application form.

bash
# 1. Analyze form to find field namesdeno run --allow-read scripts/analyze-template.ts application.pdf --pretty
# 2. Create form-data.json with applicant info# 3. Generate filled formdeno run --allow-read --allow-write scripts/generate-from-template.ts \  application.pdf form-data.json john-smith-application.pdf

Example 2: Add Approval Stamp

Scenario: Add an "APPROVED" stamp to a document.

stamp-spec.json:

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    }  ]}

Example 3: Create Report with Table

Scenario: Generate a simple report with a data table.

report-spec.json:

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 }      }    ]  }]}

Script Reference

ScriptPurposePermissions
analyze-template.tsExtract text, metadata, form fields from PDF--allow-read
generate-from-template.tsFill forms, add overlays, merge PDFs--allow-read --allow-write
generate-scratch.tsCreate PDF from JSON specification--allow-read --allow-write

Element Types (Scratch Mode)

TypeDescriptionKey Options
textText contentx, y, text, fontSize, font, color, rotate
imagePNG/JPEG imagesx, y, path, width, height, opacity
rectangleFilled/outlined rectanglesx, y, width, height, color, borderColor
lineStraight linesstartX, startY, endX, endY, thickness
circleFilled/outlined circlesx, y, radius, color, borderColor
tableBasic table layoutx, y, rows, columnWidths, rowHeight

Available Fonts

  • Helvetica (default)
  • HelveticaBold
  • HelveticaOblique
  • TimesRoman
  • TimesBold
  • Courier
  • CourierBold

Page Sizes

  • A4 (595.28 x 841.89 points)
  • Letter (612 x 792 points)
  • Legal (612 x 1008 points)
  • Custom: [width, height] in points

Common Issues and Solutions

Issue: Form fields not found

Symptoms: Error saying field name doesn't exist.

Solution:

  1. Run analyze-template.ts to get exact field names
  2. Field names are case-sensitive
  3. Some PDFs have non-fillable text that looks like form fields

Issue: Text positioning is off

Symptoms: Text appears in wrong location.

Solution:

  • PDF coordinates start from bottom-left (0,0)
  • Y increases upward, X increases rightward
  • Use analyze-template.ts to see page dimensions

Issue: Images not appearing

Symptoms: Image overlay not visible.

Solution:

  1. Check file path is relative to spec.json location
  2. Verify image is PNG or JPEG format
  3. Ensure coordinates are within page bounds

Issue: Merged PDF has wrong page order

Symptoms: Pages appear in unexpected order.

Solution:

  • prependPdfs add pages before template
  • appendPdfs add pages after template
  • Use pages array to select specific pages: [1, 3, 5]

Limitations

  • No built-in table layout: Tables require manual column width specification
  • Standard fonts only: Custom font embedding not supported in scratch mode
  • No flowing text: Text doesn't automatically wrap to next page
  • Limited form field creation: Can fill existing forms, not create new fields
  • No encryption: Cannot create password-protected PDFs
  • Basic graphics: No gradients, patterns, or complex paths
  • Text extraction: May not work perfectly on all PDFs (depends on PDF structure)

Related Skills

  • pptx-generator: For creating PowerPoint presentations
  • docx-generator: For creating Word documents
  • xlsx-generator: For creating Excel spreadsheets

來源與署名

來源:jwynia/agent-skills位於skills/general/document-processing/pdf/pdf-generator提交e02ec7e

授權條款: MIT

內容歸原作者所有。SourceWeft 從公開儲存庫中收錄這些內容。

檢舉或申請下架