{
  "schemaVersion": "1.0",
  "item": {
    "slug": "pdf-form-filler",
    "name": "Pdf Form Filler",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/RaulSimpetru/pdf-form-filler",
    "canonicalUrl": "https://clawhub.ai/RaulSimpetru/pdf-form-filler",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/pdf-form-filler",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=pdf-form-filler",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "pdf_form_filler/__init__.py",
      "pdf_form_filler/fill_pdf_form.py",
      "references/examples.md",
      "requirements.txt"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/pdf-form-filler"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/pdf-form-filler",
    "agentPageUrl": "https://openagent3.xyz/skills/pdf-form-filler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pdf-form-filler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pdf-form-filler/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "PDF Form Filler",
        "body": "Programmatically fill PDF forms with text values and checkboxes. Uses pdfrw to set form field values while preserving appearance streams for proper PDF viewer rendering."
      },
      {
        "title": "Quick Start",
        "body": "Fill a PDF form with a dictionary of field names and values:\n\nfrom pdf_form_filler import fill_pdf_form\n\nfill_pdf_form(\n    input_pdf=\"form.pdf\",\n    output_pdf=\"form_filled.pdf\",\n    data={\n        \"Name\": \"John Doe\",\n        \"Email\": \"john@example.com\",\n        \"Herr\": True,  # Checkbox\n        \"Dienstreise\": True,\n    }\n)"
      },
      {
        "title": "Features",
        "body": "Text fields: Set any text value (names, dates, addresses, etc.)\nCheckboxes: Set boolean values (True for checked, False/None for unchecked)\nAppearance states: Properly sets /On and /Off states for PDF viewer rendering\nPreserves structure: Doesn't strip form functionality—can be further edited\nNo dependencies: Uses pdfrw (lightweight, pure Python)"
      },
      {
        "title": "How It Works",
        "body": "Opens the PDF template\nIterates through form fields\nSets values for matching field names\nHandles checkboxes by setting both /V (value) and /AS (appearance state)\nSaves the filled PDF"
      },
      {
        "title": "Field Name Matching",
        "body": "Field names should match exactly as they appear in the PDF form. Common patterns:\n\nGerman forms: Herr, Frau, Dienstreise, Geschäftsnummer LfF\nEnglish forms: Full Name, Email, Agree, Submit\nDate fields: Date, DOB, Start Date\n\nTo discover field names in your PDF, use list_pdf_fields():\n\nfrom pdf_form_filler import list_pdf_fields\n\nfields = list_pdf_fields(\"form.pdf\")\nfor field_name, field_type in fields:\n    print(f\"{field_name}: {field_type}\")\n\nField types:\n\ntext: Text input field\ncheckbox: Boolean checkbox\nradio: Radio button\ndropdown: Dropdown select\nsignature: Signature field"
      },
      {
        "title": "Example: Job Application Form",
        "body": "fill_pdf_form(\n    input_pdf=\"job_application.pdf\",\n    output_pdf=\"job_application_filled.pdf\",\n    data={\n        \"Full Name\": \"Jane Smith\",\n        \"Email\": \"jane.smith@example.com\",\n        \"Phone\": \"555-1234\",\n        \"Position\": \"Software Engineer\",\n        \"Years Experience\": \"5\",\n        \n        # Checkboxes\n        \"Willing to relocate\": True,\n        \"Available immediately\": False,\n        \"Background check consent\": True,\n    }\n)"
      },
      {
        "title": "Partial fills",
        "body": "Only fill specific fields, leave others blank:\n\ndata = {\"Name\": \"Jane Doe\"}  # Only Name is set\nfill_pdf_form(\"form.pdf\", \"form_filled.pdf\", data)"
      },
      {
        "title": "Dynamic field detection",
        "body": "Get all fields and prompt for values:\n\nfrom pdf_form_filler import list_pdf_fields\n\nfields = list_pdf_fields(\"form.pdf\")\ndata = {}\nfor field_name, field_type in fields:\n    if field_type == \"text\":\n        data[field_name] = input(f\"Enter {field_name}: \")\n    elif field_type == \"checkbox\":\n        data[field_name] = input(f\"Check {field_name}? (y/n): \").lower() == 'y'\n\nfill_pdf_form(\"form.pdf\", \"form_filled.pdf\", data)"
      },
      {
        "title": "Batch fills",
        "body": "Fill multiple PDFs with the same data:\n\nimport os\nfrom pdf_form_filler import fill_pdf_form\n\ndata = {\"Name\": \"John Doe\", \"Date\": \"2026-01-24\"}\n\nfor filename in os.listdir(\"forms/\"):\n    if filename.endswith(\".pdf\"):\n        fill_pdf_form(\n            f\"forms/{filename}\",\n            f\"forms_filled/{filename}\",\n            data\n        )"
      },
      {
        "title": "Checkboxes not showing visually",
        "body": "Some PDF viewers don't render checkboxes immediately. The value is set correctly (/On or /Off), but appearance isn't regenerated. Try opening in:\n\nAdobe Reader (will render automatically)\nFirefox (has better form support)\nevince or okular on Linux (usually works)"
      },
      {
        "title": "Field names not found",
        "body": "Use list_pdf_fields() to confirm exact field names. PDF forms can be tricky:\n\nSome use unusual names (e.g., Field_1 instead of descriptive names)\nSome have nested field structures"
      },
      {
        "title": "Text appears cut off",
        "body": "Some PDFs have narrow text fields. Either:\n\nUse shorter values\nReduce font size in the PDF template itself\nManual editing after filling"
      },
      {
        "title": "Bundled Script",
        "body": "See scripts/fill_pdf_form.py for the full implementation using pdfrw."
      }
    ],
    "body": "PDF Form Filler\n\nProgrammatically fill PDF forms with text values and checkboxes. Uses pdfrw to set form field values while preserving appearance streams for proper PDF viewer rendering.\n\nQuick Start\n\nFill a PDF form with a dictionary of field names and values:\n\nfrom pdf_form_filler import fill_pdf_form\n\nfill_pdf_form(\n    input_pdf=\"form.pdf\",\n    output_pdf=\"form_filled.pdf\",\n    data={\n        \"Name\": \"John Doe\",\n        \"Email\": \"john@example.com\",\n        \"Herr\": True,  # Checkbox\n        \"Dienstreise\": True,\n    }\n)\n\nFeatures\nText fields: Set any text value (names, dates, addresses, etc.)\nCheckboxes: Set boolean values (True for checked, False/None for unchecked)\nAppearance states: Properly sets /On and /Off states for PDF viewer rendering\nPreserves structure: Doesn't strip form functionality—can be further edited\nNo dependencies: Uses pdfrw (lightweight, pure Python)\nHow It Works\nOpens the PDF template\nIterates through form fields\nSets values for matching field names\nHandles checkboxes by setting both /V (value) and /AS (appearance state)\nSaves the filled PDF\nField Name Matching\n\nField names should match exactly as they appear in the PDF form. Common patterns:\n\nGerman forms: Herr, Frau, Dienstreise, Geschäftsnummer LfF\nEnglish forms: Full Name, Email, Agree, Submit\nDate fields: Date, DOB, Start Date\n\nTo discover field names in your PDF, use list_pdf_fields():\n\nfrom pdf_form_filler import list_pdf_fields\n\nfields = list_pdf_fields(\"form.pdf\")\nfor field_name, field_type in fields:\n    print(f\"{field_name}: {field_type}\")\n\n\nField types:\n\ntext: Text input field\ncheckbox: Boolean checkbox\nradio: Radio button\ndropdown: Dropdown select\nsignature: Signature field\nExample: Job Application Form\nfill_pdf_form(\n    input_pdf=\"job_application.pdf\",\n    output_pdf=\"job_application_filled.pdf\",\n    data={\n        \"Full Name\": \"Jane Smith\",\n        \"Email\": \"jane.smith@example.com\",\n        \"Phone\": \"555-1234\",\n        \"Position\": \"Software Engineer\",\n        \"Years Experience\": \"5\",\n        \n        # Checkboxes\n        \"Willing to relocate\": True,\n        \"Available immediately\": False,\n        \"Background check consent\": True,\n    }\n)\n\nAdvanced Usage\nPartial fills\n\nOnly fill specific fields, leave others blank:\n\ndata = {\"Name\": \"Jane Doe\"}  # Only Name is set\nfill_pdf_form(\"form.pdf\", \"form_filled.pdf\", data)\n\nDynamic field detection\n\nGet all fields and prompt for values:\n\nfrom pdf_form_filler import list_pdf_fields\n\nfields = list_pdf_fields(\"form.pdf\")\ndata = {}\nfor field_name, field_type in fields:\n    if field_type == \"text\":\n        data[field_name] = input(f\"Enter {field_name}: \")\n    elif field_type == \"checkbox\":\n        data[field_name] = input(f\"Check {field_name}? (y/n): \").lower() == 'y'\n\nfill_pdf_form(\"form.pdf\", \"form_filled.pdf\", data)\n\nBatch fills\n\nFill multiple PDFs with the same data:\n\nimport os\nfrom pdf_form_filler import fill_pdf_form\n\ndata = {\"Name\": \"John Doe\", \"Date\": \"2026-01-24\"}\n\nfor filename in os.listdir(\"forms/\"):\n    if filename.endswith(\".pdf\"):\n        fill_pdf_form(\n            f\"forms/{filename}\",\n            f\"forms_filled/{filename}\",\n            data\n        )\n\nTroubleshooting\nCheckboxes not showing visually\n\nSome PDF viewers don't render checkboxes immediately. The value is set correctly (/On or /Off), but appearance isn't regenerated. Try opening in:\n\nAdobe Reader (will render automatically)\nFirefox (has better form support)\nevince or okular on Linux (usually works)\nField names not found\n\nUse list_pdf_fields() to confirm exact field names. PDF forms can be tricky:\n\nSome use unusual names (e.g., Field_1 instead of descriptive names)\nSome have nested field structures\nText appears cut off\n\nSome PDFs have narrow text fields. Either:\n\nUse shorter values\nReduce font size in the PDF template itself\nManual editing after filling\nBundled Script\n\nSee scripts/fill_pdf_form.py for the full implementation using pdfrw."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/RaulSimpetru/pdf-form-filler",
    "publisherUrl": "https://clawhub.ai/RaulSimpetru/pdf-form-filler",
    "owner": "RaulSimpetru",
    "version": "0.2.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/pdf-form-filler",
    "downloadUrl": "https://openagent3.xyz/downloads/pdf-form-filler",
    "agentUrl": "https://openagent3.xyz/skills/pdf-form-filler/agent",
    "manifestUrl": "https://openagent3.xyz/skills/pdf-form-filler/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/pdf-form-filler/agent.md"
  }
}