ClawSkills logoClawSkills

Pdf Form Filler

Fill PDF forms programmatically with text values and checkboxes. Use when you need to populate fillable PDF forms (government forms, applications, surveys, etc.

Introduction

# 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:

```python 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": "[email protected]", "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()`:

```python 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

```python fill_pdf_form( input_pdf="job_application.pdf", output_pdf="job_application_filled.pdf", data={ "Full Name": "Jane Smith", "Email": "[email protected]", "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:

```python 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:

```python 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:

```python 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.

More Products