You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Changed
Breaking: plan v2 requires version: 2 and renames top-level/item blank to page; migrate existing plans. Counts must use integer tokens from 1 to 100,000, so spell 3.0 or 3e0 as 3; total generated pages are limited to 100,000 instead of 1,000,000. The CLI --blank operand remains supported. See plan migration and limits.
Breaking: result/report v3 replaces the previous response/report contract. Stdout caps diagnostics at 20 and consumer pointers at 20 per diagnostic, with omission counts; --report retains full parts, ranges, known hashes/byte counts and actual field mappings. Update JSON consumers to the result contract and use schema result instead of schema response or schema report.
Breaking: the report query command and its selectors, --progress, --jobs and --plan-json are removed. Use --plan FILE or --plan - for plans and consume the full --report JSON directly; source inspection and assembly are sequential.
Breaking: paths resolve lexically, and output/report permissions follow umask instead of private-by-default ACLs; replacements retain their permission bits. Private ACLs, captured source/font workspaces and report-recovery copies are removed; source bytes are re-read and digest-checked before assembly. Use stable, trusted local paths and inspect output.published before retrying after a late failure; network-filesystem durability is not guaranteed. See file-safety limits.
Breaking: unmodified upstream pdfcpu v0.16.2 replaces the maintained forks and their strict malformed-token/duplicate-key/free-head refusals and parser work/resource budgets. Relaxed parsing can accept repairs or malformed syntax; finite dictionary reals may serialize to twelve fractional digits, and arbitrary numeric/dictionary identity is not promised. Specific unsafe canonical-name and shared resource/annotation shapes are refused. See PDF policy and limits.
Breaking: multiple nonempty static forms require identical resolved /DR, /DA and /Q representations; conflicting defaults are refused instead of using the former appearance/resource engine. NeedAppearances remains a viewer-regeneration request with a warning, not a promise of generated appearances. Widgets without appearance dictionaries can fail assembly when any source raises the output to PDF 2.0; provide complete appearances or assemble separately. Widgets remain unsupported for fitting. See form limits.
Breaking fidelity boundary: fitting uses upstream resize. Destination page targets survive, but scroll coordinates are not transformed; former print-box, content-analysis and appearance guarantees are removed. UserUnit is normalized to preserve physical target sheet dimensions. Coordinate destinations can now be accepted within the documented limitation; review fitting limits before relying on print or imposition fidelity.
Fitting accepts the full sheet-size grammar, including explicit landscape dimensions, beyond the previous A4/Legal choices.
Generated PDFs normally embed glyph-pruned TrueType fonts with stable glyph IDs and shared job-wide resources. Embeddable fonts that prohibit subsetting retain their complete original programs.
Added
Source bookmarks are preserved, including occurrence-specific direct and named destinations.
Repeated legacy /Dests sources retain per-occurrence targets. Existing repeated named-destination and damaged-page-tree protections remain in place.
Release packaging includes executable archives for macOS, Linux and Windows on amd64 and arm64, documentation, schemas and third-party notices/licenses. Tagged release publication provides checksums and build provenance for the archives. Runtime modules no longer use local replacements, enabling module-based installation of a compatible published tag; v0.2.0 and earlier published releases contain source only.
Internal
The bespoke verification platform is replaced by stock Go tests, curated lint/depguard, actionlint and govulncheck with pinned tooling. Six-job CI retains Required CI; independent qpdf/Poppler checks cover destinations, forms, font extraction/pruning, fitting and publication/report state.