0.18.0 — PDF/A-3, e-invoice containers (Factur-X/ZUGFeRD), automatic table layout
PDF/A-3 + attachments + e-invoice containers
- PDF/A-3 (
3b/3u/3a) — the PDF/A-2 rule set plus permission for arbitrary embedded files, veraPDF-gated in CI alongside 2b/2a. - Attachments (associated files) —
Document.attachmentsembeds files with the PDF/A-3 requirements built in: MIME/Subtype,/F+/UF+/AFRelationship,/Params, catalog/AFmembership, and a deterministic default/ModDate(byte determinism holds). - Factur-X / ZUGFeRD e-invoice containers —
Document.zugferdemits thefx:XMP identification with the required PDF/A extension schema;/AFRelationshipdefaults per profile. Container only: you supply the EN 16931 XML, Forme never generates or validates invoice semantics. Gated in CI by veraPDF and Mustangproject.
⚠️ Behavior change: PDF/A-2 + attachments now errors by name
embedData/attachments combined with pdfa: "2b" previously emitted a non-conformant file silently — ISO 19005-2 §6.8 permits only PDF/A attachments, which the engine cannot verify. It now errors and names the fix (pdfa: "3b"). Files previously produced with that combination were never valid PDF/A-2.
Automatic table layout (HTML input path)
Tables opening with a full-width colspan banner row — the most common invoice shape in existence — previously collapsed to one column with per-character vertical text, silently. Columns are now counted from the widest row's colspan sum and sized by min/max content like a browser; over-specified widths shrink gracefully instead of shredding. Found by rendering 15 real production invoice templates: all four broken renders shared this one bug.
The render-defect channel + warning dedup
- New warning class prefixed
render defect:answering "what did we get wrong?" (vs. the subset contract's "what did you ask for that we don't support?") — first entries cover clamped and below-min-content table columns. - Identical warnings collapse to one entry with a count (
(×214)); framework stylesheets previously produced thousands of identical lines.
Full details in engine/CHANGELOG.md and packages/*/CHANGELOG.md. All packages published in lockstep at 0.18.0: npm (@formepdf/*), crates.io (forme-pdf), PyPI (formepdf), Go (github.com/formepdf/forme-go@v0.18.0).