Software Developers & QA

The Free AcroForm Field Editor for Developers

Author and inspect AcroForm field definitions with exact field names, types and defaults — then export a clean, standard PDF you can fill programmatically with pdf-lib, iText, PDFBox or pdftk. Built on pdf-lib and PDF.js, running entirely in your browser. No backend, no upload, no account.

Open the Field Editor — Free
  • Client-side only
  • Standard AcroForm output
  • Built on pdf-lib + PDF.js
  • No account
A developer working at a desk with code on screen, building and inspecting PDF form fields

What is FormForge?

FormForge is a free, browser-based PDF form editor that turns any PDF into a fillable form — with no uploads, no account, and no software to install.

Price
Free
Account required
No
Where files are processed
Locally in your browser
Export format
Fillable PDF (AcroForm)
Works offline
Yes, after the page has loaded
The problem

Built for the developer who fills PDFs in code

If you fill, generate or test AcroForm PDFs programmatically, the hard part is never the drawing — it is getting exact field names, types and defaults right. Here is how FormForge answers each pain, with nothing it cannot back up.

Programmatic filling breaks unless field names and types match exactly.

The properties panel gives you full control over each field’s name, type, default value and required flag. What you type is the exact partial field name written to the PDF — no prefixing or mangling — so your pdf-lib or PDFBox fill script targets the same string you see in the editor.

You need to inspect a third-party PDF and discover the fields it already defines.

Import any existing PDF and FormForge renders it with PDF.js and surfaces every field on the canvas, so you can read and edit each field’s name and type before writing a line of fill code against a vendor’s form.

Writing generation code just to produce one-off test fixtures is overkill.

For a single fixture, the visual editor beats a generation script: drop the fields, set the edge-case config you need, export. Reserve the code path for the fills you actually run in CI.

You don’t trust random “free PDF tools” that upload your files to a server.

FormForge is client-side only — rendering, editing and export all run in the tab, and nothing is uploaded. It is built on pdf-lib for export and PDF.js for rendering, so you can reason about exactly what it does. No account, no server in the loop.

In practice

Three workflows for developers & QA

From authoring a fixture to inspecting a vendor’s form to building nasty edge cases — each done in the browser, each producing a standard AcroForm PDF.

FormForge editor adding named text and number fields to an invoice template for programmatic filling
1

Field a template, then fill it with pdf-lib

Import an invoice template, drop text and number fields, and name them exactly — invoice_number, client_name, amount_due. Export the fillable PDF and read those names straight into the pdf-lib fill script below. No guessing at field names.

FormForge properties panel showing the exact name and type of a field imported from a vendor PDF
2

Import a vendor PDF to discover its field names

Open a third-party form and FormForge renders it with PDF.js and shows every field on the page. Read each field’s exact name and type before you write fill code against someone else’s AcroForm definitions.

FormForge preview of an edge-case test fixture with a radio group, dropdown and required number field
3

Build edge-case test fixtures

Create the awkward cases your suite needs: a radio group with several options, a dropdown with a long option list, a required number field, a read-only default. Preview it, export, and commit the fixture to your test data.

Copy-paste

Fill your exported form with pdf-lib

Export the form from FormForge, then target the exact field names from the properties panel. This is standard pdf-lib against a standard AcroForm — the same field names work with iText, PDFBox or pdftk.

fill-invoice.mjs
JavaScript
import { readFile, writeFile } from 'node:fs/promises'
import { PDFDocument } from 'pdf-lib'

// The fillable PDF you exported from FormForge
const bytes = await readFile('invoice-form.pdf')
const pdfDoc = await PDFDocument.load(bytes)
const form = pdfDoc.getForm()

// Use the exact field names shown in FormForge's properties panel
form.getTextField('invoice_number').setText('INV-1042')
form.getTextField('client_name').setText('Acme Corp')
form.getTextField('amount_due').setText('1250.00')
form.getCheckBox('paid').check()
form.getDropdown('payment_terms').select('Net 30')

await writeFile('invoice-filled.pdf', await pdfDoc.save())

Verified: this snippet was run with pdf-lib 1.17 against a form built through FormForge’s exact export code path — all five field values round-tripped. Date and number fields are exported as standard text fields, so fill them with getTextField(name).setText(...). For a radio group use form.getRadioGroup(groupName).select(optionName).

Under the hood

No magic — just AcroForms, pdf-lib and PDF.js

This audience respects the stack, so here is exactly what happens. FormForge is a client-side app: your PDF is loaded into the browser, edited, and exported without ever touching a server. Everything below runs in your tab.

Standard AcroForm fields

Fields are plain AcroForm widgets — text, checkbox, radio group, dropdown, plus date/number/signature built on text fields. No XFA, no proprietary layer, so any AcroForm-aware library can read and fill the output.

Export with pdf-lib

On export, pdf-lib loads your original bytes, clears any pre-existing AcroForm, and re-creates each field via createTextField / createCheckBox / createRadioGroup / createDropdown using the exact names you set. Appearances are generated so fields render before a viewer touches them.

Rendering with PDF.js

The page you see and drop fields onto is your real PDF rasterised by Mozilla’s PDF.js. Field positions are mapped from the on-screen canvas to PDF user-space (bottom-left origin) at export time, so what you place is where it lands.

Drafts in IndexedDB

Work-in-progress is autosaved to the browser’s IndexedDB (via idb) on your device — not a server. Close the tab and your draft is still there; clear site data and it is gone. The exported PDF is the portable artefact you keep.

Client-side by design

Your PDFs never leave the browser

Test PDFs often carry real or realistic data — customer records, internal templates, unreleased document layouts — that has no business on a third-party server. FormForge processes every PDF locally: rendering, field editing and export all run in the tab, and nothing is uploaded. There is no account holding your files and no vendor server in the loop, which you can confirm yourself in the browser’s network tab. For a tool built on pdf-lib and PDF.js, that is not a marketing claim — it is just how the app is wired.

Processed in the tab

Load, render, edit and export all happen client-side — no server round-trip for the file.

Nothing uploaded

Open the network tab and watch: your PDF bytes are never transmitted anywhere.

Open, inspectable stack

Built on pdf-lib and PDF.js — well-known libraries you can reason about, not a black box.

Read our privacy policy
Free to use

Free — because there is no backend to pay for

FormForge is free to use precisely because it runs entirely in your browser: there are no servers processing your files, so there is nothing to meter or bill. No account, no credit card, no per-seat licence, and every field type is included. To be straight with you — we can’t promise it stays free indefinitely, but there is no cost, quota or subscription to use it today.

  • No account
  • No backend to bill
  • Every field type included
  • No forms-per-month quota
Open the Editor — Free
FAQ

Developer & QA questions

Can I control the exact field names?
Yes — this is the point of the tool. The name you type in the properties panel is written verbatim as the field’s partial name in the exported PDF; FormForge does not prefix, namespace or mangle it. So the string you see in the editor is the exact string your pdf-lib, iText, PDFBox or pdftk fill code targets. That control over names, types and defaults is the killer feature for programmatic filling.
What does it export — AcroForm or XFA?
Standard AcroForm. Fields are created with pdf-lib as plain AcroForm widgets: text, checkbox, radio group and dropdown, with date, number and signature built on text fields. There is no XFA and no proprietary layer, so the output is a clean, widely-compatible fillable PDF that any AcroForm-aware viewer or library can read.
Can I inspect the fields of an existing PDF?
Yes. Import any PDF and FormForge renders it with PDF.js and shows the fields on the canvas, where you can read and edit each field’s name and type. It is a quick way to discover the exact field names a third-party or vendor form defines before you write fill code against it. If a field uses an exotic type FormForge doesn’t model, re-exporting rebuilds the form from the fields it does support — so treat inspection as read-and-rebuild, not a byte-perfect passthrough.
Is the output compatible with pdf-lib / iText / PDFBox filling?
Yes. Because the fields are standard AcroForm fields, any AcroForm-aware library fills them by name. With pdf-lib you use form.getTextField(name).setText(...), form.getCheckBox(name).check() and form.getDropdown(name).select(option); iText and PDFBox expose the same fields through their own APIs. We verified a pdf-lib fill against a form built by FormForge’s exact export path and every value round-tripped — the working snippet is above.
How do I fill a number or date field in code?
As a text field. FormForge exports date and number fields as standard AcroForm text fields (there is no embedded JavaScript format action), so fill them with form.getTextField(name).setText('2026-07-21') — validation and formatting are yours to enforce in code or in the viewer. This keeps the output maximally portable across libraries and viewers.
Why is it free? (the honest answer)
Because there is no backend. Every PDF is processed in your browser, so there are no servers doing the work and nothing to meter or bill — which is what makes “free” sustainable here rather than a loss leader. There is no account, no credit card and no forms-per-month quota. Being honest: we can’t promise it stays free indefinitely, but there is genuinely no cost, upsell or subscription to use it today.

Author Your First AcroForm — Free

Free to use. Client-side only, no account, no uploads. Built on pdf-lib and PDF.js — drop your fields, name them exactly, and export a standard fillable PDF you can fill in code.

Open the Field Editor — Free