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
| Tool | Version | Result | Detail |
|---|---|---|---|
| pdfops API | hosted, tested 2026-08-07 | fails at parse | encrypted_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-lib | 1.17.1 | fails at load | Error: 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.5 | fails at load | Error: Input document to `PDFDocument.load` is encrypted. You can use `PDFDocument.load(..., { ignoreEncryption: true })` if you wish to load the document anyways. |
| pypdf | 6.15.0 | text fields verified (212/212) | 212 text fields written and re-read (text fields only) |
| pdftk-java | 3.3.3 | verified (262/262) | 262 fields filled via FDF and re-dumped |
| qpdf --check | 11.9.0 | warnings | WARNING: 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 check | no filled output to render | no filled PDF from the pdf-lib leg to render |
File facts
- Source: https://courts.ca.gov/sites/default/files/courts/default/2024-11/fl150.pdf (issuer page: here)
- Blank tested: ca-fl-150.pdf · 180 KB · sha256
46ca00246ae0f26ad893ce3ded2bd502fd6df299258b02070395cc597a3f68b4 - License: California Judicial Council form, adopted for mandatory use. Published for public court filing; the hash-verified blank is redistributed here unmodified.
- Structure: ? pages · no AcroForm · encrypted
- Fields: not enumerable on the unmodified file (post-load access failed: Error: Expected instance of PDFDict, but got instance of undefined)
Quirks & limitations
- Filed alongside FL-100 in most California family-law cases — a second sample of the Judicial Council form class, to test whether FL-100's AES-encrypted-empty-user-password behavior is the class rule or a one-off.
- Legal-document-assembly tools fill this form constantly (income/expense declarations get refiled at every support modification).
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).
← All forms in the registry · Inspect your own PDF · Make a flat PDF fillable