pdf-fill-studio
Fill a PDF locally, place the values precisely, then export. Flat PDFs use a browser editor; AcroForm PDFs fill natively; the signature is always left blank for the user to sign.
When to use
The user gives you a PDF to fill (form, claim, tax/bank/insurance document).
Setup (once)
pip install pdf-fill-studio (provides the pdf-fill-studio command).
From source instead: python3 -m venv .venv && .venv/bin/pip install -e ., then use
.venv/bin/pdf-fill-studio.
Flow
(Replace form.pdf and profile.json with the user's actual file paths.)
- Start:
pdf-fill-studio form.pdf -o out/form_filled.pdf. It detects the form type. - AcroForm (native fields): re-run with a profile of known facts:
pdf-fill-studio form.pdf -o out/form_filled.pdf --profile profile.json. Matched fields fill automatically; it prints "Needs manual input: [...]" for the rest. Ask the user for each listed field, add them to the profile, re-run, then render to verify. - Flat (no fields): a local browser editor opens. Tell the user to type values, drag boxes onto the lines, nudge with arrow keys, and click "Export PDF". Comb fields (one box per character, e.g. postal code) are detected and filled one character per cell automatically.
- XFA: tell the user this form type is not supported yet (open it in free Adobe Reader).
- The filled PDF is written to
out/. The user signs it themselves.
Self-check (before declaring done)
Render and look: python -m pdf_fill_studio.render_page out/form_filled.pdf out/preview.
Check each value sits on its line / inside its cell, not too low or spilling outside. Apply
minimal coordinate corrections and re-bake if needed.
Rules
- Never fill a signature field.
- Never store or hard-code a SIN, bank account, or card number (the profile matcher skips them).
- Everything runs locally; no document is uploaded.