Smaller PDF downloads with Fullbleed 2.5.7

Fullbleed 2.5.7 makes PDFs with embedded TrueType fonts smaller. In the retained invoice fixture, the file went from 52,553 to 12,032 bytes: a 77.1% reduction with the same text, page count, and independently rendered pixels.

The change is in the font subsetter. Existing Python and Rust rendering code gets it on upgrade, without a new option or runtime dependency.

Open the before-and-after PDFs and verification reports.

What the renderer comparison showed

Our earlier comparison with WeasyPrint and Chromium showed that Fullbleed 2.5.6 produced larger PDFs for all three shared fixtures. WeasyPrint produced the smallest files. That observation gave us a specific problem to investigate.

In Fullbleed's invoice, 47,218 of the 52,553 bytes came from the compressed embedded font program. The subset already removed unused glyph outlines, but it still carried large character maps, glyph-name data, and metrics for unused glyphs.

Keep the glyphs the document uses

The new subsetter trims those tables while keeping the original glyph IDs. Used outlines, drawing instructions, composite components, advances, and font notices remain intact. It also recalculates the horizontal-header values that depend on the retained glyphs. Unsupported character-map formats keep their original data.

The shared 100-row ledger went from 57,559 to 16,890 bytes. The three-page report went from 57,957 to 17,469 bytes. Both retained their text, page counts, and preview pixels in the check.

Savings depend on the fonts and the rest of the document. The existing coastal-menu example stayed at 3,736 bytes: it uses Standard 14 fonts and has no embedded TrueType subset to compact.

Check more than the file size

The before-and-after check covers nine fixtures, including variable and static fonts, accented and multilingual text, mathematical symbols, characters outside the Basic Multilingual Plane, and text rendered with shaping disabled. Three existing golden documents are compared separately.

Two independent PDF readers check extracted text. PDFium and Fullbleed previews are compared with the baseline. FontTools checks the embedded glyph programs, metrics, character maps, notices, and checksums. Repeated renders must also produce identical PDF bytes. Windows and Linux CI run the font checks.

The downloadable evidence contains the PDFs, previews, source inputs, verification reports, checksums, and reproduction instructions. These observations describe the retained fixtures; they do not establish a new speed result or a general size ranking.

Upgrade and review saved baselines

For Python, run python -m pip install --upgrade "fullbleed==2.5.7". Rust applications can update the fullbleed crate to 2.5.7. The Node.js and .NET packages have their own versions and engine pins; this release does not update those bindings.

PDF bytes and hashes change even when pages look the same. Review stored PDF baselines when upgrading, especially for documents with embedded fonts.

The original three-renderer comparison remains a measurement of 2.5.6, with its original files and timings. The 2.5.7 size guide records this improvement separately, and the release page links the published packages and release checks.

This release write-up was prepared by an AI coding agent under Fullbleed's direction. The measurements came from executed checks; source revisions, inputs, and verification evidence are retained. Measured October 5, 2026 UTC.

Previous
Previous

Build a React PDF editor that keeps downloads in sync

Next
Next

Fullbleed, WeasyPrint, and Chromium: compare the PDFs first