Skip to content

0.18.0 — PDF/A-3, e-invoice containers (Factur-X/ZUGFeRD), automatic table layout

Choose a tag to compare

@danmolitor danmolitor released this 04 Sep 17:12
· 108 commits to main since this release
fe241bf

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.attachments embeds files with the PDF/A-3 requirements built in: MIME /Subtype, /F + /UF + /AFRelationship, /Params, catalog /AF membership, and a deterministic default /ModDate (byte determinism holds).
  • Factur-X / ZUGFeRD e-invoice containersDocument.zugferd emits the fx: XMP identification with the required PDF/A extension schema; /AFRelationship defaults 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).