v5.4.0
What's Changed
- more doc infrastructure by @andiwand in #504
- some doc fixes by @andiwand in #518
- initial ppt support by @andiwand in #517
- more doc improvements by @andiwand in #519
- initial xls support by @andiwand in #520
- PDF: stream filter framework by @andiwand in #521
- PDF: xref streams, object streams, hybrid files by @andiwand in #522
- PDF: inherited page attributes by @andiwand in #523
- pdf: replace Element type-enum tag with RTTI is/as accessors by @andiwand in #524
- PDF: encryption — standard security handler by @andiwand in #525
- PDF: encryption follow-ups from #525 review by @andiwand in #527
- PDF: throw on reads from an unauthenticated encrypted file by @andiwand in #528
- docs: consolidate per-module STATUS/PLAN notes into AGENTS.md by @andiwand in #526
- PDF: cross-reference recovery and robustness for real-world files by @andiwand in #529
- minor
uint8_tcleanup by @andiwand in #530 - PDF: full ToUnicode CMap support (multi-byte codes, bfrange, ligatures) by @andiwand in #531
- PDF stage 1.2: simple-font /Encoding → Unicode by @andiwand in #532
- AGENTS.md: record test-running, PR, and code-style conventions by @andiwand in #535
- PDF stage 1.3 (part A): composite (Type0) fonts by @andiwand in #533
- PDF stage 1.3 (part B): predefined Unicode CMaps for Type0 fonts by @andiwand in #534
- PDF: stage-1 roadmap wrap-up — summary + drop sub-stage tags from code by @andiwand in #536
- clang-tidy: effective config with warnings-as-errors by @andiwand in #537
- PDF stage 2.1: text transforms & the placed-text emission by @andiwand in #538
- PDF stage 2.2: glyph advances & metrics by @andiwand in #539
- PDF stage 2.3: form XObjects by @andiwand in #540
- pdf cleanup by @andiwand in #541
- pdf: nullable Object accessors + unit tests by @andiwand in #544
- PDF stage 2.4: text render modes & extraction refinements by @andiwand in #542
- PDF stage 2.5: space inference by @andiwand in #543
- pdf: dedup span styles into atomic CSS classes by @andiwand in #549
- pdf: emit Tc/Tw as CSS letter-spacing/word-spacing by @andiwand in #545
- PDF stage 3.0: Font interface + SFNT/TrueType reader by @andiwand in #546
- PDF stage 3.1: OTF wrap + uniform PUA re-encode + checksum rebuild by @andiwand in #547
- PDF stage 3.2: FontFile as a DecodedFile + specimen-page HTML by @andiwand in #548
- PDF stage 3.3: embedded TrueType → @font-face + reverse map by @andiwand in #550
- PDF stage 3.4: bare CFF (/FontFile3 / Type1C) by @andiwand in #551
- PDF stage 3.4: SFNT reader on std::string + shared byte_string util by @andiwand in #554
- PDF stage 3.5: Type1 (/FontFile) by @andiwand in #552
- PDF: close stage 3 — fonts in HTML done by @andiwand in #555
- PDF html: center pages on a backdrop with paper styling by @andiwand in #556
- PDF stage 4.0: page-element IR + path accumulation by @andiwand in #558
- PDF stage 4.1: SVG scaffolding + filled paths by @andiwand in #559
- PDF stage 4.2: strokes & line style by @andiwand in #560
- PDF→HTML size PR1: collapse the dual text layer by @andiwand in #564
- PDF→HTML size PR2: fold paint+font into per-font combined classes by @andiwand in #565
- PDF→HTML size PR3: indent with one tab per level by @andiwand in #566
- PDF HTML: use a fixed-width type for the font-face index by @andiwand in #567
- PDF stage 4.3: clipping by @andiwand in #561
- PDF→HTML: place text by its baseline, not its box top by @andiwand in #568
- PDF stage 4.4: PDF function evaluator + colour spaces by @andiwand in #562
- PDF stage 4.5: image XObjects — JPEG (DCTDecode) pass-through by @andiwand in #563
- PDF stage 4.6: raster images — Flate/LZW → PNG encode by @andiwand in #569
- PDF stage 4.7: inline images (BI/ID/EI) by @andiwand in #570
- PDF: text colour, strongly-typed render mode, image clip fix by @andiwand in #571
- PDF stage 4.8: image masks, stencil masks, soft masks by @andiwand in #572
- PDF stage 4.9: axial & radial shadings (types 2/3) by @andiwand in #573
- PDF stage 4.10: tiling patterns (PatternType 1) by @andiwand in #574
- PDF tiling patterns: colour-through-base fix, BBox clip, registry dedup by @andiwand in #575
- PDF: const-qualify scalar by-value constructor params by @andiwand in #576
- font: return std::string from serializers, drop istream inputs by @andiwand in #580
- PDF text: dual-layer + single-layer rendering with PdfTextMode option by @andiwand in #579
- PDF stage 4.12: non-embedded font substitution + standard-14 AFM widths by @andiwand in #581
- PDF stage 4.13: Type3 fonts by @andiwand in #582
- PDF stage 4.14: transparency — constant alpha & blend modes by @andiwand in #583
- PDF: close stage 4 — AGENTS.md rewrite, drop stage tags, delete plan by @andiwand in #584
- PDF stage 4.15: soft masks & transparency-group compositing by @andiwand in #585
- PDF: fix garbled/misplaced text — string escapes, CID encoding, substitute baseline by @andiwand in #586
- test: upgrade output-comparison tooling to odr_core_test 2.0.0 by @andiwand in #587
- PDF: trim AGENTS.md/README.md — drop stale status & redundant roadmap by @andiwand in #588
- PDF: resolve an image's named /ColorSpace against the resource table by @andiwand in #589
- PDF: expose /Info + page count through file_meta().document_meta by @andiwand in #590
- PDF: clean up indirect-reference parsing and length-less stream reads by @andiwand in #592
- PDF: legacy CJK CMaps — code → CID → Unicode for composite fonts by @andiwand in #593
- PDF: render /Link annotations as overlays (URI + internal GoTo) by @andiwand in #591
- test: drop pdf2htmlEX/wvWare cross-engine reference comparison by @andiwand in #594
- dev: VS Code integration (build, test, CLI, debug, profile) by @andiwand in #595
- docs: add CLAUDE.md pointer, tighten AGENTS.md, add coding conventions by @andiwand in #596
Full Changelog: v5.3.0...v5.4.0