pdf-form-filler

19
1
Source

Fill PDF forms programmatically with text values and checkboxes. Use when you need to populate fillable PDF forms (government forms, applications, surveys, etc.) with data. Supports setting text fields and checkboxes with proper appearance states for visual rendering.

Install

mkdir -p .claude/skills/pdf-form-filler && curl -L -o skill.zip "https://mcp.directory/api/skills/download/1862" && unzip -o skill.zip -d .claude/skills/pdf-form-filler && rm skill.zip

Installs to .claude/skills/pdf-form-filler

About this skill

PDF Form Filler

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.

Quick Start

Fill a PDF form with a dictionary of field names and values:

from pdf_form_filler import fill_pdf_form

fill_pdf_form(
    input_pdf="form.pdf",
    output_pdf="form_filled.pdf",
    data={
        "Name": "John Doe",
        "Email": "john@example.com",
        "Herr": True,  # Checkbox
        "Dienstreise": True,
    }
)

Features

  • Text fields: Set any text value (names, dates, addresses, etc.)
  • Checkboxes: Set boolean values (True for checked, False/None for unchecked)
  • Appearance states: Properly sets /On and /Off states for PDF viewer rendering
  • Preserves structure: Doesn't strip form functionality—can be further edited
  • No dependencies: Uses pdfrw (lightweight, pure Python)

How It Works

  1. Opens the PDF template
  2. Iterates through form fields
  3. Sets values for matching field names
  4. Handles checkboxes by setting both /V (value) and /AS (appearance state)
  5. Saves the filled PDF

Field Name Matching

Field names should match exactly as they appear in the PDF form. Common patterns:

  • German forms: Herr, Frau, Dienstreise, Geschäftsnummer LfF
  • English forms: Full Name, Email, Agree, Submit
  • Date fields: Date, DOB, Start Date

To discover field names in your PDF, use list_pdf_fields():

from pdf_form_filler import list_pdf_fields

fields = list_pdf_fields("form.pdf")
for field_name, field_type in fields:
    print(f"{field_name}: {field_type}")

Field types:

  • text: Text input field
  • checkbox: Boolean checkbox
  • radio: Radio button
  • dropdown: Dropdown select
  • signature: Signature field

Example: Job Application Form

fill_pdf_form(
    input_pdf="job_application.pdf",
    output_pdf="job_application_filled.pdf",
    data={
        "Full Name": "Jane Smith",
        "Email": "jane.smith@example.com",
        "Phone": "555-1234",
        "Position": "Software Engineer",
        "Years Experience": "5",
        
        # Checkboxes
        "Willing to relocate": True,
        "Available immediately": False,
        "Background check consent": True,
    }
)

Advanced Usage

Partial fills

Only fill specific fields, leave others blank:

data = {"Name": "Jane Doe"}  # Only Name is set
fill_pdf_form("form.pdf", "form_filled.pdf", data)

Dynamic field detection

Get all fields and prompt for values:

from pdf_form_filler import list_pdf_fields

fields = list_pdf_fields("form.pdf")
data = {}
for field_name, field_type in fields:
    if field_type == "text":
        data[field_name] = input(f"Enter {field_name}: ")
    elif field_type == "checkbox":
        data[field_name] = input(f"Check {field_name}? (y/n): ").lower() == 'y'

fill_pdf_form("form.pdf", "form_filled.pdf", data)

Batch fills

Fill multiple PDFs with the same data:

import os
from pdf_form_filler import fill_pdf_form

data = {"Name": "John Doe", "Date": "2026-01-24"}

for filename in os.listdir("forms/"):
    if filename.endswith(".pdf"):
        fill_pdf_form(
            f"forms/{filename}",
            f"forms_filled/{filename}",
            data
        )

Troubleshooting

Checkboxes not showing visually

Some PDF viewers don't render checkboxes immediately. The value is set correctly (/On or /Off), but appearance isn't regenerated. Try opening in:

  • Adobe Reader (will render automatically)
  • Firefox (has better form support)
  • evince or okular on Linux (usually works)

Field names not found

Use list_pdf_fields() to confirm exact field names. PDF forms can be tricky:

  • Some use unusual names (e.g., Field_1 instead of descriptive names)
  • Some have nested field structures

Text appears cut off

Some PDFs have narrow text fields. Either:

  1. Use shorter values
  2. Reduce font size in the PDF template itself
  3. Manual editing after filling

Bundled Script

See scripts/fill_pdf_form.py for the full implementation using pdfrw.

You might also like

flutter-development

aj-geddes

Build beautiful cross-platform mobile apps with Flutter and Dart. Covers widgets, state management with Provider/BLoC, navigation, API integration, and material design.

245776

drawio-diagrams-enhanced

jgtolentino

Create professional draw.io (diagrams.net) diagrams in XML format (.drawio files) with integrated PMP/PMBOK methodologies, extensive visual asset libraries, and industry-standard professional templates. Use this skill when users ask to create flowcharts, swimlane diagrams, cross-functional flowcharts, org charts, network diagrams, UML diagrams, BPMN, project management diagrams (WBS, Gantt, PERT, RACI), risk matrices, stakeholder maps, or any other visual diagram in draw.io format. This skill includes access to custom shape libraries for icons, clipart, and professional symbols.

189408

godot

bfollington

This skill should be used when working on Godot Engine projects. It provides specialized knowledge of Godot's file formats (.gd, .tscn, .tres), architecture patterns (component-based, signal-driven, resource-based), common pitfalls, validation tools, code templates, and CLI workflows. The `godot` command is available for running the game, validating scripts, importing resources, and exporting builds. Use this skill for tasks involving Godot game development, debugging scene/resource files, implementing game systems, or creating new Godot components.

172268

nano-banana-pro

garg-aayush

Generate and edit images using Google's Nano Banana Pro (Gemini 3 Pro Image) API. Use when the user asks to generate, create, edit, modify, change, alter, or update images. Also use when user references an existing image file and asks to modify it in any way (e.g., "modify this image", "change the background", "replace X with Y"). Supports both text-to-image generation and image-to-image editing with configurable resolution (1K default, 2K, or 4K for high resolution). DO NOT read the image file first - use this skill directly with the --input-image parameter.

199226

ui-ux-pro-max

nextlevelbuilder

"UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 8 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient."

156191

rust-coding-skill

UtakataKyosui

Guides Claude in writing idiomatic, efficient, well-structured Rust code using proper data modeling, traits, impl organization, macros, and build-speed best practices.

157171

Stay ahead of the MCP ecosystem

Get weekly updates on new skills and servers.