Skip to main content

PDF Form Builder that makes a flat PDF fillable

Turn a PDF into a fillable form with text fields, checkboxes and dropdowns.

Adds new fields only; existing fields cannot be edited, and signatures, calculations and validation are not available.

  • Use the layout you already have
  • Text, checkbox, dropdown, radio
  • Download a fillable PDF

How do I make a PDF fillable?

Upload the PDF, place text boxes, checkboxes, dropdowns or radio buttons on the page and name each one. Then download the fillable copy. The upload uses one check, and saving and downloading are free. Date, signature and calculation fields are not available, and the PDF is removed from the server after 24 hours.

Will the fields work in Adobe Reader and on phones?

Yes. They are standard form fields, the kind Acrobat Reader, Preview, Chrome, Edge and most mobile readers can fill. Test the download in the form filler and in the reader your recipients use, and fill every field once before you send the form out.

Where is my form saved, and for how long?

The PDF stays on the server until the hourly cleanup removes files older than 24 hours, so finish within a day. The field layout is saved only when you press Save, and only with your browser session. Clearing cookies or switching browsers loses the layout.

What each field type becomes in the PDF

The builder writes standard AcroForm fields, the interactive form format that most desktop and mobile PDF readers can fill. One field of each type was added to a sample page and the file was reopened: pdf-lib listed the new fields as a text field, a checkbox, a dropdown and a radio group, next to the text field the sample already had.

Builder field types and their PDF equivalents
Builder type Written to the PDF as Starting size on screen Settings
Text Single-line text field 200 × 28 px Name, default value, font size 6 to 72 pt (12 by default)
Checkbox Checkbox, initially unticked 20 × 20 px Name
Dropdown Combo box with no option preselected 200 × 28 px Name, options one per line
Radio Radio group with one button per option 20 × 20 px per button Name, options one per line

Screen pixels and PDF points

Sizes in the builder are measured on the page preview. When you download, each value is divided by the preview's zoom factor to get PDF points, and the vertical position is flipped because PDF pages measure from the bottom edge. An A4 page is 595 points wide. Shown 800 pixels wide, its zoom factor is about 1.34, so the default 200 × 28 px text field becomes roughly 149 × 21 points in the file.

Field names

  • New fields start with names such as Text_1, Checkbox_2 and Dropdown_3. Rename them to something meaningful: form data exports and scripts use these names, and some screen readers announce the name when a field has no tooltip.
  • Any character other than a letter, a digit or an underscore becomes an underscore when the PDF is built, so "Full name" is saved as Full_name and "e-mail" as e_mail.
  • Names must be unique across the whole file, including fields that were already in it. When a name is taken, pdf-lib refuses with "A field already exists with the specified name", and the builder skips that field. The download then succeeds without it, so check the field count if one seems to be missing.

Radio buttons stack downwards

A radio group is placed from its first button. Every further option goes directly below the previous one, at the same size, with a 4-point gap. In PDF coordinates, option number n (counting from zero) sits at the first button's height above the bottom edge minus n × (button height + 4).

Worked example near the bottom of a page

Radio buttons 15 points high, three options, first button placed 20 points above the bottom edge. Option 1: 20 points above the edge. Option 2: 20 − (15 + 4) = 1 point above the edge. Option 3: 1 − 19 = −18 points, below the page and invisible. Place groups high enough for every option, or split long option lists into a dropdown.

Features the builder does not add

  • Signature, date, multi-line text and push-button fields.
  • Required flags, input validation, number formats and calculations.
  • Tooltip labels for screen readers or a custom tab order. Fields are added in the order you placed them.
  • Changes to existing fields. Fields already in the PDF are not shown, moved or deleted, only kept.
  • Fonts other than Helvetica. Default values are drawn in the Windows-1252 character set, so letters such as Lithuanian ė or Polish ł make the download fail.
  • Encrypted files. A PDF with an open password or with permission restrictions is refused at upload, because pdf-lib cannot save it in a readable form.

Saving a layout and checking the result

Save stores the list of placed fields with your browser session, so you can reopen the project from the dashboard while the session lasts. The uploaded PDF itself is deleted by the hourly cleanup once it is more than 24 hours old, so finish and download within a day. The upload uses one check; saving and downloading do not use more.

Download builds the form in your browser with pdf-lib and names it after the original with _form added. The file's Producer becomes pdf-lib (https://github.com/Hopding/pdf-lib), and it is written with compressed object streams. Open the result in the form filler or in the reader your recipients use, and fill every field once before sending it out.

Acrobat, LibreOffice or a code library instead

Acrobat Pro's Prepare Form detects fields from the lines and boxes already on the page and adds what this builder cannot: date and signature fields, multi-line text, required flags, number formats, calculations, tooltips and a custom tab order. A form that must enforce formats, be signed in place or meet accessibility requirements belongs there.

LibreOffice Writer is the free route when you are still writing the document. Place form controls in the text and export with the PDF form option ticked, and the fields arrive in the PDF with their names and defaults. Reader-only apps such as Preview, Chrome and Acrobat Reader fill fields but cannot add them.

There is no simple shell command that draws new fields onto an existing PDF; libraries such as pdf-lib, the same one this builder runs in your browser, do it in a few lines of JavaScript. What the command line is good for is checking the result: pdftk form.pdf dump_data_fields lists every field name, type and default in the finished file, which is the quickest way to confirm that nothing was skipped. Use PDFCheck for a handful of text, checkbox, dropdown and radio fields on a PDF you already have, from any device, without installing anything.

Before you build a form

  • Does saving or downloading use a check? No. The one check is spent at upload. You can reopen the project from the dashboard, save again and download as often as you like while the file and the session last.
  • Why did Download fail? The known cause is a default value with a letter outside the Windows-1252 set, such as Lithuanian ė or Polish ł, which the built-in Helvetica font cannot encode. Clear or simplify the default value and download again. A duplicate field name does not fail the download; that field is skipped instead, so check the count.

Last updated . How these results were produced: the pdf-lib 1.17.1 calls the form builder makes in the browser were replayed in Node.js on a synthetic PDF that already contained one text field, and the saved file was read back with pdf-lib, Poppler pdfinfo 26.10 and qpdf 12.4. Placement figures are calculated from the builder's own code.

Do more with a free account

A free account adds API tokens for scripts and AI agents. Need files over 50 MB? Pro and AI accept up to 100 MB and remove the daily check limit.