From e44593a44c065bf8985d6446b172eb9e7fbd0bcf Mon Sep 17 00:00:00 2001 From: Tater Date: Sun, 4 Oct 2026 20:34:12 -0500 Subject: [PATCH 1/2] Compact embedded TrueType font metadata for 2.5.7 --- .github/workflows/ci.yml | 15 +- .github/workflows/publish-crates.yml | 2 +- .github/workflows/release.yml | 13 + Cargo.lock | 2 +- Cargo.toml | 2 +- README.md | 2 +- ReleaseNotes.MD | 20 ++ cli_schema.md | 2 +- docs/release/2.5.7-runbook.md | 63 ++++ docs/release/README.md | 5 + fullbleed-agent-contract.json | 2 +- goldens/expected/golden_suite.expected.json | 12 +- llms.txt | 2 +- pyproject.toml | 2 +- src/font_subset.rs | 164 +++++++++- src/font_subset/cmap.rs | 329 ++++++++++++++++++++ tools/smoke_font_subsets.py | 256 +++++++++++++++ 17 files changed, 874 insertions(+), 19 deletions(-) create mode 100644 docs/release/2.5.7-runbook.md create mode 100644 src/font_subset/cmap.rs create mode 100644 tools/smoke_font_subsets.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e83c2da..8141dfb 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,7 +1,7 @@ name: CI env: - FULLBLEED_CI_VERSION: "2.5.6" + FULLBLEED_CI_VERSION: "2.5.7" RUST_MIN_STACK: "4194304" on: @@ -157,6 +157,19 @@ jobs: path: target/text-extraction if-no-files-found: warn + - name: Verify compact font subsets with independent font and PDF readers + run: | + python -m pip install pypdf==6.19.0 pypdfium2==5.14.0 fonttools==4.65.0 pillow==12.3.0 + python -I tools/smoke_font_subsets.py --out target/font-subsets + + - name: Retain compact font subset PDFs and preview evidence + if: always() + uses: actions/upload-artifact@v7 + with: + name: font-subsets-${{ runner.os }} + path: target/font-subsets + if-no-files-found: warn + - name: Retain gradient PDFs and preview evidence if: always() uses: actions/upload-artifact@v7 diff --git a/.github/workflows/publish-crates.yml b/.github/workflows/publish-crates.yml index 0177932..ee1c260 100644 --- a/.github/workflows/publish-crates.yml +++ b/.github/workflows/publish-crates.yml @@ -10,7 +10,7 @@ on: description: "Annotated release tag whose exact source commit will be published" required: true type: string - default: "v2.5.6" + default: "v2.5.7" publish: description: "Publish after all validation gates pass" required: true diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1c2796c..ae05a57 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -182,6 +182,19 @@ jobs: crates/fullbleed_audit_contract/target/package/*.crate if-no-files-found: error + - name: Verify compact font subsets with independent font and PDF readers + run: | + python -m pip install pypdf==6.19.0 pypdfium2==5.14.0 fonttools==4.65.0 pillow==12.3.0 + python -I tools/smoke_font_subsets.py --out target/font-subsets + + - name: Retain compact font subset PDFs and preview evidence + if: always() + uses: actions/upload-artifact@v7 + with: + name: release-font-subsets + path: target/font-subsets + if-no-files-found: error + build-wheels: name: Build wheel (${{ matrix.label }}) needs: validate diff --git a/Cargo.lock b/Cargo.lock index e7b4d20..056951e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,7 +4,7 @@ version = 4 [[package]] name = "fullbleed" -version = "2.5.6" +version = "2.5.7" dependencies = [ "fullbleed_audit_contract", "subsetter", diff --git a/Cargo.toml b/Cargo.toml index bb6c372..a2bb9f6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "fullbleed" -version = "2.5.6" +version = "2.5.7" edition = "2024" rust-version = "1.85" license = "MIT" diff --git a/README.md b/README.md index b93a369..201e5ed 100644 --- a/README.md +++ b/README.md @@ -269,7 +269,7 @@ python -m pip install fullbleed From a local wheel: ```bash -python -m pip install C:\path\to\fullbleed-2.5.6-cp310-abi3-win_amd64.whl +python -m pip install C:\path\to\fullbleed-2.5.7-cp310-abi3-win_amd64.whl ``` From a source checkout with Rust installed, no Python build package is needed: diff --git a/ReleaseNotes.MD b/ReleaseNotes.MD index c9fee47..2aac64c 100644 --- a/ReleaseNotes.MD +++ b/ReleaseNotes.MD @@ -1,3 +1,23 @@ +# Fullbleed Release Notes - 2.5.7 + +Release date: October 5, 2026 + +## Smaller embedded TrueType subsets + +TrueType subsets now omit unused character-map entries, glyph names, and metrics +while preserving the original glyph IDs, retained outlines and instructions, +composite dependencies, advances, and font notices. Horizontal-header extrema +are recalculated for the subset. Character-map formats other than 4 and 12 keep +their original bytes; an unsupported or larger map rewrite uses the source map. + +The change adds no runtime dependency and does not change the rendering API. +PDF bytes and hashes change. Review stored PDF baselines before updating them. +Independent font, text, and pixel checks are described in the +[2.5.7 release runbook](docs/release/2.5.7-runbook.md). Claims remain limited to the +retained fixtures and validator reports. + +--- + # Fullbleed Release Notes - 2.5.6 Release date: October 3, 2026 diff --git a/cli_schema.md b/cli_schema.md index d0ce79f..3058c34 100644 --- a/cli_schema.md +++ b/cli_schema.md @@ -2,7 +2,7 @@ # CLI and Agent JSON Contract -Generated from the installed Fullbleed **2.5.6** runtime. The canonical machine artifact is `fullbleed-agent-contract.json`. +Generated from the installed Fullbleed **2.5.7** runtime. The canonical machine artifact is `fullbleed-agent-contract.json`. ## Authority and invocation diff --git a/docs/release/2.5.7-runbook.md b/docs/release/2.5.7-runbook.md new file mode 100644 index 0000000..fb45f7d --- /dev/null +++ b/docs/release/2.5.7-runbook.md @@ -0,0 +1,63 @@ +# Fullbleed 2.5.7 release runbook + +This patch compacts embedded TrueType metadata without renumbering retained +glyphs. Publish from a clean annotated `v2.5.7` tag after the checks below pass. + +## Build and verify + +Keep Cargo, Python, CI smoke metadata, release defaults, and generated agent +artifacts synchronized at 2.5.7. The optional MCP adapter stays at 0.1.1 and the +audit crate stays at 0.1.3. Historical example pins and measured comparisons keep +the versions they actually verified. + +Build and install a wheel in an isolated environment. Generate agent artifacts +using `tools/generate_agent_contract.py --python PATH --json`, rebuild and install +the final wheel, then run the generator with `--check`. Build the sdist from that +same source. Do not hand-edit generated agent artifacts. + +- Run the focused font-subset Rust tests, then the full Rust suite with default + and Python/SVG features and the packaged-crate MSRV check. +- Run focused installed-native font, text, preview, compiled-table and profile + Python tests, followed by the full suite with `FULLBLEED_TEST_INSTALLED_NATIVE=1`. +- Install test-only `pypdf==6.19.0`, `pypdfium2==5.14.0`, `fonttools==4.65.0`, and + `pillow==12.3.0`. Run `python -I tools/smoke_font_subsets.py --out TARGET`. + Retain all PDFs, source HTML/CSS, independent and native previews, table sizes, + versions and hashes. The check independently closes composite dependencies + and verifies glyph IDs, raw outlines/instructions, metrics, cmap mappings, + font notices, SFNT checksums and recalculated horizontal-header extrema. +- Record a public 2.5.6 baseline with `--allow-legacy-metadata`. Compare the + candidate using `--baseline BASELINE_DIRECTORY`. Identical inputs must retain + text, page count, PDFium pixels and native previews while reducing PDF bytes. + Running the normal check on 2.5.6 must reject its untrimmed metadata. +- Run the existing styled-text, gradient, template, compiled-binding and + reproducibility checks. Compare the three golden PDFs with public 2.5.6 using + an independent renderer before accepting changed PDF hashes; direct PNG + baselines must stay unchanged. +- Inspect representative invoice, ledger, multilingual, math, symbol and + non-BMP previews. The unshaped-text case exercises the exposed option too. +- Require Linux/Windows CI and print-profile gates. Retain raw external + validator reports. The optional dedicated PDF/VT validator remains + unconfigured; its skipped job is not independent conformance evidence. +- Run installed-package smoke, agent-contract checks, release metadata/license + checks, deterministic goldens, CSS status and bundled Skill validation. + +## Publish and verify + +Use the configured PyPI trusted publisher and crates.io workflow after the +final release gates pass. Retain the source tag, workflow conclusions and +artifact hashes. Install the public wheel in a fresh environment and repeat +the font-subset check before promoting the release. Optional bindings remain +independently versioned and require their own installed-package checks when +updating their pinned engine. + +The earlier three-renderer comparison stays an immutable 2.5.6 measurement. +Size changes from this patch belong in a separately identified before/after +record; they must not replace its historical PDF artifacts or timing samples. +These checks do not establish general renderer parity, accessibility, print +device compatibility, or throughput. + +The table handling follows the OpenType specifications for +[`cmap`](https://learn.microsoft.com/en-us/typography/opentype/spec/cmap), +[`post`](https://learn.microsoft.com/en-us/typography/opentype/spec/post), +[`hmtx`](https://learn.microsoft.com/en-us/typography/opentype/spec/hmtx), and +[`hhea`](https://learn.microsoft.com/en-us/typography/opentype/spec/hhea). diff --git a/docs/release/README.md b/docs/release/README.md index b84ac9c..91f675f 100644 --- a/docs/release/README.md +++ b/docs/release/README.md @@ -4,6 +4,11 @@ This directory is the release-operations layer for Fullbleed. It is separate from feature documentation so release decisions can be audited without reading engine internals. +## 2.5.7 Documents + +- `docs/release/2.5.7-runbook.md`: compact TrueType metadata and retained output checks. +- `tools/smoke_font_subsets.py`: independent font-program, text, and pixel comparisons. + ## 2.5.6 Documents - `docs/release/2.5.6-runbook.md`: single-copy synthesized-bold text, affine glyph previews, and retained extraction checks. diff --git a/fullbleed-agent-contract.json b/fullbleed-agent-contract.json index 3add764..eb2fb40 100644 --- a/fullbleed-agent-contract.json +++ b/fullbleed-agent-contract.json @@ -4207,7 +4207,7 @@ "license": "MIT", "name": "Fullbleed PDF Engine", "python_package": "fullbleed", - "version": "2.5.6" + "version": "2.5.7" }, "profiles": { "pdf": { diff --git a/goldens/expected/golden_suite.expected.json b/goldens/expected/golden_suite.expected.json index 559ef9d..5705341 100644 --- a/goldens/expected/golden_suite.expected.json +++ b/goldens/expected/golden_suite.expected.json @@ -1,14 +1,14 @@ { "schema": "fullbleed.golden_suite.v1", - "generated_at_utc": "2026-10-03T15:49:04.157375+00:00", + "generated_at_utc": "2026-10-05T01:29:44.268281Z", "cases": { "acme_invoice": { "case_id": "acme_invoice", "report": "examples/acme_invoice/report.py", "pdf": { "path": "examples/acme_invoice/output/acme_sample_invoice.pdf", - "bytes": 133691, - "sha256": "f7f69432764aa811a53a3c83b9df08743fbf0ae5804d4686809f472b642690fb" + "bytes": 93250, + "sha256": "6199c7ec17f35f4592aa2eb972df169086b3974d25993417cdd40b8ef0d8c379" }, "png": { "count": 1, @@ -36,8 +36,8 @@ "report": "examples/bank_statement/report.py", "pdf": { "path": "examples/bank_statement/output/bank_statement.pdf", - "bytes": 59765, - "sha256": "76b835ce61bc857feb807fdafadacab01a118e7e22abefd937091ae396f3f805" + "bytes": 19365, + "sha256": "2eb3c562674e5e0e7920e7bbb1ea306667c791904ebdcfabd3777e5db6cccb7a" }, "png": { "count": 2, @@ -93,4 +93,4 @@ "css_layers": null } } -} \ No newline at end of file +} diff --git a/llms.txt b/llms.txt index 349f1f6..019eea6 100644 --- a/llms.txt +++ b/llms.txt @@ -1,6 +1,6 @@ # Fullbleed PDF Engine -> Fullbleed 2.5.6 is a deterministic, self-contained document-generation runtime for Python and Rust. It turns structured data plus static HTML/CSS into validated PDF documents without a browser. +> Fullbleed 2.5.7 is a deterministic, self-contained document-generation runtime for Python and Rust. It turns structured data plus static HTML/CSS into validated PDF documents without a browser. The installed runtime is authoritative. Do not infer its API from this file or from remembered release knowledge. Start with: diff --git a/pyproject.toml b/pyproject.toml index 7741f90..d0e64b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ backend-path = ["build_backend"] [project] name = "fullbleed" -version = "2.5.6" +version = "2.5.7" description = "Deterministic Python PDF engine for reports, invoices, accessible documents, print-ready output, and compiled VDP" readme = "README.md" requires-python = ">=3.10" diff --git a/src/font_subset.rs b/src/font_subset.rs index ada69dd..c74ec81 100644 --- a/src/font_subset.rs +++ b/src/font_subset.rs @@ -3,7 +3,10 @@ //! The PDF text path emits original glyph IDs through Identity-H. Keeping those IDs stable avoids //! a CID remap table and lets subsetting happen at link time: unused `glyf` records become empty, //! while used glyphs and every recursively referenced composite component retain their original -//! indices. All other tables remain byte-for-byte compatible with the original glyph namespace. +//! indices. Character maps and metrics are compacted within that original glyph namespace; +//! PostScript glyph names are omitted because PDF text selects glyphs by ID or character map. + +mod cmap; use std::collections::{BTreeSet, VecDeque}; @@ -101,7 +104,11 @@ pub(crate) fn subset_truetype( let (new_glyf, new_loca) = rebuild_glyph_tables(glyf, &old_offsets, glyph_total, &keep, loca_is_long)?; - let data = rebuild_sfnt(source, signature, &records, &new_glyf, &new_loca)?; + let hmtx = subset_metrics(&records, glyph_total, &keep)?; + let hhea = subset_horizontal_header(&records, glyf, &old_offsets, &hmtx, &keep)?; + let data = rebuild_sfnt( + signature, &records, &new_glyf, &new_loca, &hmtx, &hhea, &keep, + )?; if data.len() >= source.len() { return None; } @@ -286,12 +293,97 @@ fn rebuild_glyph_tables( Some((glyf, loca)) } +fn subset_metrics( + records: &[TableRecord<'_>], + glyph_total: usize, + keep: &BTreeSet, +) -> Option> { + let hhea = table(records, *b"hhea")?; + let hmtx = table(records, *b"hmtx")?; + let long_count = usize::from(read_u16(hhea, 34)?); + if long_count == 0 || long_count > glyph_total { + return None; + } + let length = long_count.checked_mul(4)? + (glyph_total - long_count).checked_mul(2)?; + let mut result = hmtx.get(..length)?.to_vec(); + // The final long metric's advance also belongs to every trailing bearing-only glyph. + let shared_advance_used = keep.iter().any(|glyph| usize::from(*glyph) >= long_count); + for glyph in 0..glyph_total { + if keep.contains(&u16::try_from(glyph).ok()?) { + continue; + } + if glyph < long_count { + if glyph + 1 != long_count || !shared_advance_used { + write_u16(&mut result, glyph * 4, 0)?; + } + write_u16(&mut result, glyph * 4 + 2, 0)?; + } else { + write_u16(&mut result, long_count * 4 + (glyph - long_count) * 2, 0)?; + } + } + Some(result) +} + +fn subset_post(source: &[u8]) -> Option> { + // OpenType post version 3 retains the 32-byte header and omits glyph names. Font naming, + // licensing records, underline metrics and italic angle remain in their original tables. + let mut result = source.get(..32)?.to_vec(); + write_u32(&mut result, 0, 0x0003_0000)?; + Some(result) +} + +fn subset_horizontal_header( + records: &[TableRecord<'_>], + glyf: &[u8], + offsets: &[usize], + hmtx: &[u8], + keep: &BTreeSet, +) -> Option> { + let mut result = table(records, *b"hhea")?.to_vec(); + let long_count = usize::from(read_u16(&result, 34)?); + let mut max_advance = 0u16; + let mut bounds: Option<(i32, i32, i32)> = None; + for glyph in keep { + let index = usize::from(*glyph); + let advance = read_u16(hmtx, index.min(long_count.checked_sub(1)?) * 4)?; + max_advance = max_advance.max(advance); + let outline = glyf.get(*offsets.get(index)?..*offsets.get(index + 1)?)?; + if outline.is_empty() || read_i16(outline, 0)? == 0 { + continue; + } + let bearing_offset = if index < long_count { + index * 4 + 2 + } else { + long_count * 4 + (index - long_count) * 2 + }; + let left = i32::from(read_i16(hmtx, bearing_offset)?); + let extent = left + i32::from(read_i16(outline, 6)?) - i32::from(read_i16(outline, 2)?); + let right = i32::from(advance) - extent; + bounds = Some(match bounds { + Some((min_left, min_right, max_extent)) => ( + min_left.min(left), + min_right.min(right), + max_extent.max(extent), + ), + None => (left, right, extent), + }); + } + write_u16(&mut result, 10, max_advance)?; + let (left, right, extent) = bounds.unwrap_or((0, 0, 0)); + for (offset, value) in [(12, left), (14, right), (16, extent)] { + write_u16(&mut result, offset, i16::try_from(value).ok()? as u16)?; + } + Some(result) +} + fn rebuild_sfnt( - _source: &[u8], signature: [u8; 4], records: &[TableRecord<'_>], glyf: &[u8], loca: &[u8], + hmtx: &[u8], + hhea: &[u8], + keep: &BTreeSet, ) -> Option> { let mut tables: Vec<([u8; 4], Vec)> = Vec::with_capacity(records.len()); for record in records { @@ -304,6 +396,12 @@ fn rebuild_sfnt( let mut data = match record.tag { tag if tag == *b"glyf" => glyf.to_vec(), tag if tag == *b"loca" => loca.to_vec(), + tag if tag == *b"hmtx" => hmtx.to_vec(), + tag if tag == *b"hhea" => hhea.to_vec(), + tag if tag == *b"post" => subset_post(record.data)?, + tag if tag == *b"cmap" => { + cmap::subset(record.data, keep).unwrap_or_else(|| record.data.to_vec()) + } _ => record.data.to_vec(), }; if record.tag == *b"head" { @@ -443,7 +541,8 @@ fn checksum(data: &[u8]) -> u32 { #[cfg(test)] mod tests { use super::{ - CHECKSUM_MAGIC, checksum, read_i16, read_loca, subset_truetype, table, table_records, + CHECKSUM_MAGIC, TableRecord, checksum, read_i16, read_loca, read_u16, read_u32, + subset_metrics, subset_truetype, table, table_records, }; use crate::sfnt::{Face, GlyphId}; use crate::sfnt_outline::OutlineBuilder; @@ -551,4 +650,61 @@ mod tests { assert!(outline.0 > 0); } } + + #[test] + fn subset_metadata_preserves_mapped_glyphs_metrics_and_font_notices() { + let inter = include_bytes!("../python/fullbleed_assets/fonts/Inter-Variable.ttf"); + for source in [NOTO, VARIABLE_NOTO, inter.as_slice()] { + let original = Face::parse(source, 0).expect("source font"); + let characters: Vec<(char, GlyphId)> = "A z\u{e9}\u{100}\u{3a9}\u{2211}\u{1d49c}" + .chars() + .filter_map(|ch| original.glyph_index(ch as u32).map(|gid| (ch, gid))) + .collect(); + let glyphs = characters.iter().map(|(_, gid)| gid.0).collect(); + let subset = subset_truetype(source, &glyphs).expect("subset"); + let face = Face::parse(&subset.data, 0).expect("subset face"); + let before = table_records(source).unwrap(); + let after = table_records(&subset.data).unwrap(); + assert_eq!(table(&after, *b"name"), table(&before, *b"name")); + let post = table(&after, *b"post").unwrap(); + assert_eq!(post.len(), 32); + assert_eq!(read_u32(post, 0), Some(0x0003_0000)); + assert_eq!(&post[4..], &table(&before, *b"post").unwrap()[4..32]); + assert!( + table(&after, *b"cmap").unwrap().len() < table(&before, *b"cmap").unwrap().len() + ); + assert_eq!(checksum(&subset.data), CHECKSUM_MAGIC); + for (ch, gid) in characters { + assert_eq!(face.glyph_index(ch as u32), Some(gid), "{ch}"); + assert_eq!(face.glyph_hor_advance(gid), original.glyph_hor_advance(gid)); + } + let unused = original.glyph_index('Q' as u32).unwrap(); + assert_eq!(face.glyph_index('Q' as u32), None); + assert_eq!(face.glyph_hor_advance(unused), Some(0)); + } + } + + #[test] + fn sparse_metrics_keep_shared_advance_for_a_used_trailing_glyph() { + let mut hhea = [0u8; 36]; + hhea[35] = 2; + let hmtx = [0x01, 0xf4, 0, 10, 0x02, 0x58, 0, 20, 0, 30, 0, 40]; + let records = [ + TableRecord { + tag: *b"hhea", + data: &hhea, + }, + TableRecord { + tag: *b"hmtx", + data: &hmtx, + }, + ]; + let result = subset_metrics(&records, 4, &BTreeSet::from([0, 3])).unwrap(); + assert_eq!(result, [0x01, 0xf4, 0, 10, 0x02, 0x58, 0, 0, 0, 0, 0, 40]); + let result = subset_metrics(&records, 4, &BTreeSet::from([0])).unwrap(); + assert_eq!(read_u16(&result, 4), Some(0)); + assert_eq!(&result[..4], &hmtx[..4]); + assert!(subset_metrics(&records, 1, &BTreeSet::from([0])).is_none()); + assert!(subset_metrics(&records, 5, &BTreeSet::from([0])).is_none()); + } } diff --git a/src/font_subset/cmap.rs b/src/font_subset/cmap.rs new file mode 100644 index 0000000..6e9bd1c --- /dev/null +++ b/src/font_subset/cmap.rs @@ -0,0 +1,329 @@ +//! Prune common character maps without renumbering glyphs or changing encoding records. +//! +//! Other formats retain their original subtable bytes. Malformed input or a larger replacement +//! falls back to the source cmap, just as unsupported outlines retain the full font program. + +use super::{read_u16, read_u32, write_u16, write_u32}; +use std::collections::{BTreeMap, BTreeSet}; + +pub(super) fn subset(source: &[u8], keep: &BTreeSet) -> Option> { + if read_u16(source, 0)? != 0 { + return None; + } + let count = usize::from(read_u16(source, 2)?); + let header_size = 4usize.checked_add(count.checked_mul(8)?)?; + let mut output = source.get(..header_size)?.to_vec(); + let mut offsets = BTreeMap::new(); + for index in 0..count { + let offset = usize::try_from(read_u32(source, 4 + index * 8 + 4)?).ok()?; + let new_offset = if let Some(offset) = offsets.get(&offset) { + *offset + } else { + let tail = source.get(offset..)?; + let format = read_u16(tail, 0)?; + let length = match format { + 0 | 2 | 4 | 6 => usize::from(read_u16(tail, 2)?), + 8 | 10 | 12 | 13 => usize::try_from(read_u32(tail, 4)?).ok()?, + 14 => usize::try_from(read_u32(tail, 2)?).ok()?, + _ => return None, + }; + let original = tail.get(..length)?; + let replacement = match format { + 4 => subset_format4(original, keep), + 12 => subset_format12(original, keep), + _ => None, + }; + let bytes = replacement + .as_deref() + .filter(|bytes| bytes.len() < original.len()) + .unwrap_or(original); + if output.len().checked_add(bytes.len())? > source.len() { + return None; + } + let new_offset = u32::try_from(output.len()).ok()?; + output.extend_from_slice(bytes); + offsets.insert(offset, new_offset); + new_offset + }; + write_u32(&mut output, 4 + index * 8 + 4, new_offset)?; + } + (output.len() < source.len()).then_some(output) +} + +fn subset_format4(source: &[u8], keep: &BTreeSet) -> Option> { + let count_x2 = read_u16(source, 6)?; + if count_x2 == 0 || count_x2 % 2 != 0 { + return None; + } + let count = usize::from(count_x2 / 2); + let starts = 16 + count * 2; + let deltas = starts + count * 2; + let ranges = deltas + count * 2; + source.get(..ranges + count * 2)?; + let mut segments: Vec<(u16, u16, u16)> = Vec::new(); + let mut previous_end = None; + for index in 0..count { + let start = read_u16(source, starts + index * 2)?; + let end = read_u16(source, 14 + index * 2)?; + if start > end || previous_end.is_some_and(|prior| start <= prior) { + return None; + } + previous_end = Some(end); + let delta = read_u16(source, deltas + index * 2)?; + let range_word = ranges + index * 2; + let range = usize::from(read_u16(source, range_word)?); + for code in start..=end { + let glyph = if range == 0 { + code.wrapping_add(delta) + } else { + let glyph = read_u16(source, range_word + range + usize::from(code - start) * 2)?; + if glyph == 0 { + 0 + } else { + glyph.wrapping_add(delta) + } + }; + if glyph == 0 || !keep.contains(&glyph) { + continue; + } + let delta = glyph.wrapping_sub(code); + if let Some(last) = segments + .last_mut() + .filter(|last| last.1.checked_add(1) == Some(code) && last.2 == delta) + { + last.1 = code; + } else { + segments.push((code, code, delta)); + } + } + } + if !segments.last().is_some_and(|last| last.1 == u16::MAX) { + segments.push((u16::MAX, u16::MAX, 1)); + } + let count = u16::try_from(segments.len()).ok()?; + let length = 16usize.checked_add(usize::from(count).checked_mul(8)?)?; + let mut output = vec![0; usize::from(u16::try_from(length).ok()?)]; + write_u16(&mut output, 0, 4)?; + write_u16(&mut output, 2, u16::try_from(length).ok()?)?; + write_u16(&mut output, 4, read_u16(source, 4)?)?; + write_u16(&mut output, 6, count.checked_mul(2)?)?; + let mut power = 1u16; + let mut selector = 0u16; + while power <= count / 2 { + power *= 2; + selector += 1; + } + write_u16(&mut output, 8, power * 2)?; + write_u16(&mut output, 10, selector)?; + write_u16(&mut output, 12, count * 2 - power * 2)?; + for (index, (start, end, delta)) in segments.iter().enumerate() { + write_u16(&mut output, 14 + index * 2, *end)?; + write_u16(&mut output, 16 + usize::from(count) * 2 + index * 2, *start)?; + write_u16(&mut output, 16 + usize::from(count) * 4 + index * 2, *delta)?; + } + Some(output) +} + +fn subset_format12(source: &[u8], keep: &BTreeSet) -> Option> { + let count = usize::try_from(read_u32(source, 12)?).ok()?; + source.get(..16usize.checked_add(count.checked_mul(12)?)?)?; + let mut groups: Vec<(u32, u32, u32)> = Vec::new(); + let mut previous_end = None; + for index in 0..count { + let start = read_u32(source, 16 + index * 12)?; + let end = read_u32(source, 20 + index * 12)?; + let first = read_u32(source, 24 + index * 12)?; + if start > end || end > 0x10ffff || previous_end.is_some_and(|prior| start <= prior) { + return None; + } + previous_end = Some(end); + let last = first.checked_add(end - start)?; + if first > u32::from(u16::MAX) { + continue; + } + for glyph in keep.range((first as u16)..=(last.min(u32::from(u16::MAX)) as u16)) { + if *glyph == 0 { + continue; + } + let code = start.checked_add(u32::from(*glyph) - first)?; + if let Some(last) = groups.last_mut().filter(|last| { + last.1.checked_add(1) == Some(code) + && last.2.checked_add(code - last.0) == Some(u32::from(*glyph)) + }) { + last.1 = code; + } else { + groups.push((code, code, u32::from(*glyph))); + if groups.len() > count { + return None; + } + } + } + } + let mut output = source.get(..16)?.to_vec(); + for (start, end, glyph) in &groups { + output.extend_from_slice(&start.to_be_bytes()); + output.extend_from_slice(&end.to_be_bytes()); + output.extend_from_slice(&glyph.to_be_bytes()); + } + let length = u32::try_from(output.len()).ok()?; + write_u32(&mut output, 4, length)?; + write_u32(&mut output, 12, u32::try_from(groups.len()).ok()?)?; + Some(output) +} + +#[cfg(test)] +mod tests { + use super::*; + + fn array_cmap4() -> Vec { + // A/B/C use a glyph array; U+0100/0101 use a delta. The final segment is .notdef. + [ + 4u16, 46, 0, 6, 4, 1, 2, 0x43, 0x101, 0xffff, 0, 0x41, 0x100, 0xffff, 0, 1, 1, 6, 0, 0, + 3, 7, 9, + ] + .into_iter() + .flat_map(u16::to_be_bytes) + .collect() + } + + #[test] + fn format4_preserves_array_and_delta_mappings_and_the_terminal_segment() { + let result = subset_format4(&array_cmap4(), &BTreeSet::from([0, 3, 9, 0x101])).unwrap(); + let expected: Vec = [ + 4u16, 48, 0, 8, 8, 2, 0, 0x41, 0x43, 0x100, 0xffff, 0, 0x41, 0x43, 0x100, 0xffff, + 0xffc2, 0xffc6, 1, 1, 0, 0, 0, 0, + ] + .into_iter() + .flat_map(u16::to_be_bytes) + .collect(); + assert_eq!(result, expected); + // A replacement with more segment records must not inflate an existing cmap. + let mut source = vec![0, 0, 0, 1, 0, 3, 0, 1, 0, 0, 0, 12]; + source.extend_from_slice(&array_cmap4()); + assert!(subset(&source, &BTreeSet::from([0, 3, 9, 0x101])).is_none()); + } + + #[test] + fn format12_keeps_non_bmp_glyphs_and_merges_consecutive_survivors() { + let source: Vec = [ + 0x000c0000u32, + 52, + 0, + 3, + 0x41, + 0x43, + 3, + 0x1f600, + 0x1f605, + 40, + 0x10ffff, + 0x10ffff, + 70, + ] + .into_iter() + .flat_map(u32::to_be_bytes) + .collect(); + let result = subset_format12(&source, &BTreeSet::from([0, 4, 42, 43, 70])).unwrap(); + let expected: Vec = [ + 0x000c0000u32, + 52, + 0, + 3, + 0x42, + 0x42, + 4, + 0x1f602, + 0x1f603, + 42, + 0x10ffff, + 0x10ffff, + 70, + ] + .into_iter() + .flat_map(u32::to_be_bytes) + .collect(); + assert_eq!(result, expected); + assert_eq!( + subset_format12(&source, &BTreeSet::from([0])) + .unwrap() + .len(), + 16 + ); + } + + #[test] + fn expanding_format12_rewrite_declines_before_allocating_a_larger_map() { + let source: Vec = [0x000c0000u32, 28, 0, 1, 0x41, 0x45, 3] + .into_iter() + .flat_map(u32::to_be_bytes) + .collect(); + assert!(subset_format12(&source, &BTreeSet::from([3, 5, 7])).is_none()); + let outside_unicode: Vec = [0x000c0000u32, 28, 0, 1, 0, 0xffffffff, 0] + .into_iter() + .flat_map(u32::to_be_bytes) + .collect(); + assert!(subset_format12(&outside_unicode, &BTreeSet::from([1])).is_none()); + } + + #[test] + fn duplicate_encoding_records_share_a_compacted_subtable() { + let mut source = vec![0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 20, 0, 3, 0, 1, 0, 0, 0, 20]; + source.extend_from_slice(&array_cmap4()); + let result = subset(&source, &BTreeSet::from([3])).unwrap(); + assert_eq!(read_u32(&result, 8), Some(20)); + assert_eq!(read_u32(&result, 16), Some(20)); + assert_eq!(&result[..20], &source[..20]); + assert_eq!(result.len(), 20 + 32); + } + + #[test] + fn legacy_encoding_subtable_is_copied_byte_for_byte() { + let mut source = vec![0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 20, 0, 1, 0, 0, 0, 0, 0, 66]; + source.extend_from_slice(&array_cmap4()); + let legacy: Vec = [6u16, 16, 18, 0x41, 3, 3, 7, 9] + .into_iter() + .flat_map(u16::to_be_bytes) + .collect(); + source.extend_from_slice(&legacy); + let result = subset(&source, &BTreeSet::from([3])).unwrap(); + assert_eq!(read_u32(&result, 16), Some(52)); + assert_eq!(&result[52..], legacy.as_slice()); + assert_eq!(&result[12..16], &source[12..16]); + } + + #[test] + fn format4_array_delta_wraps_and_missing_glyph_stays_missing() { + let mut source = array_cmap4(); + write_u16(&mut source, 28, 0xfffe).unwrap(); + write_u16(&mut source, 42, 0).unwrap(); + let result = subset_format4(&source, &BTreeSet::from([0, 1, 7])).unwrap(); + // A -> 3 - 2 = 1, B remains missing, C -> 9 - 2 = 7. + assert_eq!(read_u16(&result, 6), Some(6)); + assert_eq!( + [read_u16(&result, 14), read_u16(&result, 16)], + [Some(0x41), Some(0x43)] + ); + assert_eq!( + [read_u16(&result, 28), read_u16(&result, 30)], + [Some(0xffc0), Some(0xffc4)] + ); + } + + #[test] + fn malformed_character_maps_decline_compaction_without_panicking() { + let valid = array_cmap4(); + for end in 0..valid.len() { + // Some prefixes omit only unused glyphs; those may still have a valid retained map. + let _ = subset_format4(&valid[..end], &BTreeSet::from([3, 7, 9])); + } + let mut overlapping = valid.clone(); + write_u16(&mut overlapping, 24, 0x42).unwrap(); + assert!(subset_format4(&overlapping, &BTreeSet::from([3])).is_none()); + assert!(subset(&[0, 0, 0, 1], &BTreeSet::new()).is_none()); + let overflow: Vec = [0x000c0000u32, 28, 0, 1, 0, u32::MAX, 1] + .into_iter() + .flat_map(u32::to_be_bytes) + .collect(); + assert!(subset_format12(&overflow, &BTreeSet::from([3])).is_none()); + } +} diff --git a/tools/smoke_font_subsets.py b/tools/smoke_font_subsets.py new file mode 100644 index 0000000..34de0ca --- /dev/null +++ b/tools/smoke_font_subsets.py @@ -0,0 +1,256 @@ +#!/usr/bin/env python3 +# SPDX-License-Identifier: MIT +"""Check embedded subset outlines, metrics, extraction and pixels with independent readers. + +Development-only dependencies: pypdf, pypdfium2, fonttools, pillow. No runtime dependencies +are added to Fullbleed. A baseline records actual output from an earlier installed wheel. +""" +from __future__ import annotations + +import argparse +from datetime import datetime, timezone +import hashlib +from html import escape +from importlib import metadata, resources +from io import BytesIO +import json +from pathlib import Path +import re +import struct +import sys + +import fullbleed +from fontTools.ttLib import TTFont +import pypdfium2 as pdfium +from pypdf import PdfReader + +ROOT = Path(__file__).resolve().parents[1] +sys.path.insert(0, str(ROOT / 'benchmarks/pdf_renderers')) +import fixtures +from validate import check_pdf + + +def digest(data: bytes) -> str: + return hashlib.sha256(data).hexdigest() + + +def compact(text: str) -> str: + return re.sub(r'\s+', '', text) + + +def cases(): + for name in fixtures.NAMES: + html, contract = fixtures.document(name) + yield name, fixtures.FONT, html, fixtures.stylesheet(), contract, {} + fonts = resources.files('fullbleed_assets').joinpath('fonts') + samples = [ + ('inter-variable', 'Inter-Variable.ttf', 'Inter', 'Invoice INV-2042 Résumé café Ångström Ω Ж 123.45', {}), + ('noto-variable', 'NotoSans-Regular.ttf', 'Noto Sans', 'Résumé café Ångström Ā Ć Ω Ж 123.45', {}), + ('math-static', 'NotoSansMath-Regular.ttf', 'Noto Sans Math', 'A 𝒜 ∑ ∫ ≠ → 123.45', {}), + ('symbols-static', 'NotoSansSymbols-Regular.ttf', 'Noto Sans Symbols', '♀ →', {}), + ('symbols2-static', 'NotoSansSymbols2-Regular.ttf', 'Noto Sans Symbols2', '☀ ★ ☑ 🂡 ⚀', {}), + ('inter-unshaped', 'Inter-Variable.ttf', 'Inter', 'Invoice café déjà vu 123.45', + {'shape_text': False}), + ] + for name, filename, family, text, options in samples: + html = f'

{escape(text)}

' + css = f'@page {{size:A4;margin:36pt}} body {{font-family:"{family}";font-size:18pt}}' + yield name, Path(str(fonts.joinpath(filename))), html, css, {'text': text}, options + + +def fonts_in(resources_dict, seen=None): + seen = set() if seen is None else seen + resources_dict = resources_dict.get_object() + fonts = resources_dict.get('/Font', {}) + fonts = fonts.get_object() if hasattr(fonts, 'get_object') else fonts + for ref in fonts.values(): + font = ref.get_object() + identity = getattr(ref, 'idnum', id(font)) + if identity in seen: + continue + seen.add(identity) + for descendant in font.get('/DescendantFonts', [font]): + descendant = descendant.get_object() + descriptor = descendant.get('/FontDescriptor') + if descriptor and '/FontFile2' in descriptor.get_object(): + yield font, descendant, descriptor.get_object()['/FontFile2'].get_object() + xobjects = resources_dict.get('/XObject', {}) + xobjects = xobjects.get_object() if hasattr(xobjects, 'get_object') else xobjects + for ref in xobjects.values(): + obj = ref.get_object() + if obj.get('/Subtype') == '/Form' and '/Resources' in obj: + yield from fonts_in(obj['/Resources'], seen) + + +def used_glyphs(font, descendant, original): + used = {0} + if '/W' in descendant: + widths = descendant['/W'] + index = 0 + while index < len(widths): + first = int(widths[index]) + value = widths[index + 1] + if isinstance(value, list): + used.update(range(first, first + len(value))) + index += 2 + else: + used.update(range(first, int(value) + 1)) + index += 3 + else: + assert font['/Subtype'] == '/TrueType' and font['/Encoding'] == '/WinAnsiEncoding' + cmap = original.getBestCmap() + for code in range(256): + try: + character = bytes([code]).decode('cp1252') + except UnicodeDecodeError: + continue + if ord(character) in cmap: + used.add(original.getGlyphID(cmap[ord(character)])) + order = original.getGlyphOrder() + pending = list(used) + while pending: + gid = pending.pop() + glyph = original['glyf'][order[gid]] + if glyph.isComposite(): + for component in glyph.components: + child = original.getGlyphID(component.glyphName) + if child not in used: + used.add(child) + pending.append(child) + return used + + +def check_font(font, descendant, stream, source, legacy): + data = stream.get_data() + original = TTFont(source) + embedded = TTFont(BytesIO(data), checkChecksums=2) + assert embedded['maxp'].numGlyphs == original['maxp'].numGlyphs + assert embedded.reader['name'] == original.reader['name'], 'Font notices/names changed' + padded = data + b'\0' * ((-len(data)) % 4) + assert sum(struct.unpack(f'>{len(padded) // 4}I', padded)) & 0xffffffff == 0xb1b0afba + keep = used_glyphs(font, descendant, original) + before_order, after_order = original.getGlyphOrder(), embedded.getGlyphOrder() + before_glyf, after_glyf = original.reader['glyf'], embedded.reader['glyf'] + before_loca, after_loca = original['loca'].locations, embedded['loca'].locations + for gid in keep: + before = before_glyf[before_loca[gid]:before_loca[gid + 1]] + after = after_glyf[after_loca[gid]:after_loca[gid + 1]] + assert before.rstrip(b'\0') == after.rstrip(b'\0'), f'Outline/instructions changed: {gid}' + assert original['hmtx'][before_order[gid]] == embedded['hmtx'][after_order[gid]], f'Metrics changed: {gid}' + for old_table, new_table in zip(original['cmap'].tables, embedded['cmap'].tables, strict=True): + assert (old_table.platformID, old_table.platEncID, old_table.format) == ( + new_table.platformID, new_table.platEncID, new_table.format) + if not hasattr(old_table, 'cmap'): + continue + for point, name in old_table.cmap.items(): + gid = original.getGlyphID(name) + if gid in keep: + assert point in new_table.cmap, f'Character mapping lost: {point}' + assert embedded.getGlyphID(new_table.cmap[point]) == gid + if not legacy: + assert embedded['post'].formatType == 3 and len(embedded.reader['post']) == 32 + fields = ['advanceWidthMax', 'minLeftSideBearing', 'minRightSideBearing', 'xMaxExtent'] + original_header = tuple(getattr(embedded['hhea'], name) for name in fields) + embedded['hhea'].recalc(embedded) + assert original_header == tuple(getattr(embedded['hhea'], name) for name in fields) + long_count = embedded['hhea'].numberOfHMetrics + shared = any(gid >= long_count for gid in keep) + for gid in range(embedded['maxp'].numGlyphs): + if gid in keep: + continue + advance, bearing = embedded['hmtx'][after_order[gid]] + assert bearing == 0 + if gid < long_count - 1 or (gid == long_count - 1 and not shared): + assert advance == 0 + result = {'original_bytes': source.stat().st_size, 'program_bytes': len(data), + 'encoded_bytes': len(stream._data), 'retained_glyphs_and_components': len(keep), + 'tables': {tag: embedded.reader.tables[tag].length for tag in embedded.reader.keys()}, + 'original_glyph_ids_outlines_metrics_and_mappings_preserved': True, + 'font_name_and_notice_table_preserved': True} + original.close() + embedded.close() + return result + + +def run(args): + args.out.mkdir(parents=True, exist_ok=False) + baseline = json.loads((args.baseline / 'verification.json').read_text()) if args.baseline else None + report = {'schema': 'fullbleed.font_subset_smoke.v1', 'ok': False, + 'checked_at': datetime.now(timezone.utc).isoformat(), + 'versions': {name: metadata.version(name) for name in ['fullbleed', 'pypdf', 'pypdfium2', 'fonttools', 'pillow']}, + 'baseline': str(args.baseline) if args.baseline else None, + 'legacy_metadata_allowed': args.allow_legacy_metadata, 'cases': [], + 'scope': 'Retained fixtures and independent reader/font checks; not a general rendering or conformance guarantee.'} + try: + for name, font_path, html, css, contract, options in cases(): + folder = args.out / name + folder.mkdir() + (folder / 'source.html').write_text(html, encoding='utf-8') + (folder / 'source.css').write_text(css, encoding='utf-8') + engine = fullbleed.PdfEngine(font_files=[str(font_path)], + document_timestamp='2026-10-05T01:10:00Z', **options) + pdf = bytes(engine.render_pdf(html, css)) + path = folder / 'output.pdf' + path.write_bytes(pdf) + assert pdf == bytes(engine.render_pdf(html, css)), f'{name}: repeat bytes changed' + reader = PdfReader(path) + extracted = ''.join(page.extract_text() for page in reader.pages) + if 'text' in contract: + assert compact(extracted) == compact(contract['text']), (name, extracted) + else: + check = check_pdf(path, contract, fixtures.TOKEN) + assert check['passed'], check['failures'] + checked_fonts = [] + seen = set() + for page in reader.pages: + for font, descendant, stream in fonts_in(page['/Resources'], seen): + checked_fonts.append(check_font(font, descendant, stream, font_path, args.allow_legacy_metadata)) + assert checked_fonts, f'{name}: no embedded fonts checked' + pixels = [] + pdfium_text = [] + with pdfium.PdfDocument(path) as document: + for index in range(len(document)): + page = document[index] + text = page.get_textpage() + pdfium_text.append(text.get_text_range()) + text.close() + bitmap = page.render(scale=1.25) + image = bitmap.to_pil() + image.save(folder / f'pdfium-{index + 1}.png') + pixels.append(digest(image.tobytes())) + bitmap.close() + page.close() + assert compact(''.join(pdfium_text)) == compact(extracted), f'{name}: readers disagree' + native = [bytes(png) for png in engine.render_finalized_pdf_image_pages(str(path), 96)] + for index, png in enumerate(native, 1): + (folder / f'native-{index}.png').write_bytes(png) + item = {'name': name, 'pdf_bytes': len(pdf), 'pdf_sha256': digest(pdf), + 'font_source_sha256': digest(font_path.read_bytes()), + 'html_sha256': digest(html.encode()), 'css_sha256': digest(css.encode()), + 'pages': len(reader.pages), 'text': extracted, 'pdfium_pixel_sha256': pixels, + 'native_png_sha256': [digest(png) for png in native], 'fonts': checked_fonts, + 'repeat_pdf_bytes_identical': True, 'independent_text_readers_agree': True} + if baseline: + prior = next(case for case in baseline['cases'] if case['name'] == name) + for key in ['font_source_sha256', 'html_sha256', 'css_sha256', 'pages', 'text', 'pdfium_pixel_sha256', 'native_png_sha256']: + assert item[key] == prior[key], f'{name}: changed {key}' + assert item['pdf_bytes'] < prior['pdf_bytes'], f'{name}: PDF did not shrink' + item['baseline_pdf_bytes'] = prior['pdf_bytes'] + item['pdf_reduction_percent'] = round(100 * (1 - len(pdf) / prior['pdf_bytes']), 2) + item['baseline_text_and_pixels_identical'] = True + report['cases'].append(item) + print(json.dumps({'case': name, 'bytes': len(pdf), 'pages': item['pages'], 'fonts_checked': len(checked_fonts)}), flush=True) + report['ok'] = True + finally: + (args.out / 'verification.json').write_text(json.dumps(report, indent=2) + '\n', encoding='utf-8') + return report + + +if __name__ == '__main__': + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument('--out', type=Path, required=True) + parser.add_argument('--baseline', type=Path) + parser.add_argument('--allow-legacy-metadata', action='store_true') + args = parser.parse_args() + result = run(args) + print(json.dumps({'ok': result['ok'], 'cases': len(result['cases'])})) From 50af97c313f2c51aae64a624d8b8c3a90c65e35c Mon Sep 17 00:00:00 2001 From: Tater Date: Sun, 4 Oct 2026 20:44:08 -0500 Subject: [PATCH 2/2] Refresh retained PDFs after reviewed font compaction --- .../output/acme_sample_invoice.pdf | Bin 133691 -> 93250 bytes .../bank_statement/output/bank_statement.pdf | Bin 59765 -> 19365 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/examples/acme_invoice/output/acme_sample_invoice.pdf b/examples/acme_invoice/output/acme_sample_invoice.pdf index f2eac162a5dd6420927a43bfce5eb8913b39ceee..c7511b2bfdd4f50bd4d103ad44e9024493d0302d 100644 GIT binary patch delta 7647 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­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

h)gZo@~7 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