Registry

CRA TD1 (2026) — programmatic fill compatibility

Personal Tax Credits Return · Canada Revenue Agency (CRA) · TD1 E (26). Tested 2026-08-06 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-06fails 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 (24/24)24 text fields written and re-read (text fields only)
pdftk-java3.3.3verified (27/27)27 fields filled via FDF and re-dumped
qpdf --check11.9.0structurally cleanerrors that qpdf cannot detect
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 CRA TD1 (2026) 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 — 27 fields across all field types via fill_form, no decrypt step — and writes a decrypted output.

Why do PDF libraries reject the CRA TD1 (2026)?

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).