Registry

FL-150 — programmatic fill compatibility

Income and Expense Declaration · Judicial Council of California · Rev. September 1, 2024. Tested 2026-08-07 on the unmodified upstream blank — every number below comes from a recorded run, not from documentation.

Verdict at a glance

ToolVersionResultDetail
pdfops APIhosted, tested 2026-08-07fails at parseencrypted_pdf: this PDF is encrypted (often with an empty user password: it opens in viewers but rejects programmatic inspection). Decrypt it first — e.g. `qpdf --decrypt in.pdf out.pdf` — then retry. Verified examp
pdf-lib1.17.1fails at loadError: Input document to `PDFDocument.load` is encrypted. You can use `PDFDocument.load(..., { ignoreEncryption: true })` if you wish to load the document anyways.
@cantoo/pdf-lib (fork)2.6.5fails at loadError: Input document to `PDFDocument.load` is encrypted. You can use `PDFDocument.load(..., { ignoreEncryption: true })` if you wish to load the document anyways.
pypdf6.15.0text fields verified (212/212)212 text fields written and re-read (text fields only)
pdftk-java3.3.3verified (262/262)262 fields filled via FDF and re-dumped
qpdf --check11.9.0warningsWARNING: public/registry/blank/ca-fl-150.pdf: page 3: shared object 1843: in hint table but not computed list | qpdf: operation succeeded with warnings
poppler render checkno filled output to renderno filled PDF from the pdf-lib leg to render

File facts

Quirks & limitations

Tested request

The unmodified blank is rejected at parse time, so there is no working direct request to show — see the quirks above for the verified decrypt-first workaround.

Frequently asked

Can I fill the FL-150 programmatically?

Not directly with pdf-lib-family tooling — the unmodified blank ships encrypted, and pdf-lib and the pdfops API refuse it at parse time. Verified workaround: decrypt first (qpdf --decrypt), after which it fills as a normal AcroForm; pypdf with the cryptography extra opens it directly (text fields only). pdftk-java fills the encrypted blank natively — 262 fields across all field types via fill_form, no decrypt step — and writes a decrypted output.

Why do PDF libraries reject the FL-150?

The blank is AES-encrypted with an empty user password: anyone can open it in a viewer, but the owner password restricts modification, and strict parsers refuse the file outright. qpdf --decrypt removes the restriction losslessly; pypdf can open it directly when its optional cryptography dependency is installed; pdftk-java both reads and fills it natively (its output is decrypted).