Font embedding and subsetting — why PDFs get heavy or break
7 min read
When two PDFs of the same content are 200KB and 15MB, the usual culprit isn't images. It's fonts.
No font data, no letters
Every character you see is drawn from outline data (glyphs) in a font file. A PDF may command “draw ‘hello’ in Source Sans” — but without Source Sans's glyph data, there is nothing to draw with.
So PDF offers a choice: carry the font data inside the file (embedding), or just record the font's name and assume the reader's machine has it. The second option is where broken documents come from.
Why CJK fonts are heavy
A Latin font needs a few hundred glyphs — letters, digits, punctuation. Korean has 11,172 possible composed syllables; fonts covering CJK ideographs can exceed twenty thousand glyphs. That's why a single font file can run tens of megabytes.
Embed such a font whole and a one-page document balloons to that size. The compromise that solves this is subsetting.
Subsetting — carry only the characters you used
Subset embedding packs only the glyphs that actually appear in the document. If the document contains just “hello”, five glyphs' worth of data goes in. It's the standard technique that keeps CJK PDFs small, and you can spot it in a viewer's font list: a prefix like “ABCDEF+” before a font name marks a subset.
There's a cost. A subset contains no glyphs for characters the document didn't use — so editing that PDF later to add new text requires the original font again. The file is complete for reading, incomplete for revising.
Fonts have licenses too
Fonts are software, and whether embedding is allowed is a license term. Some free fonts restrict embedding in commercial documents; some commercial fonts require a separate license for it.
If you're building document templates for an organization, check embedding rights at font-selection time. Open-licensed fonts (SIL OFL and similar — Noto, Source Han, Pretendard) embed freely and remove the question entirely.
The substitution trap
Opening a document with non-embedded fonts, a viewer substitutes something similar. On screen it reads well enough that nobody notices — until the printout shows drifted spacing or missing characters.
Substituted fonts have different character widths, which can move line breaks. A good share of “I checked it on screen but the print came out different” starts here. For documents that matter, checking the embedded-font list comes before checking the screen.
The document producer's checklist
Font problems are prevented at creation time — that's the whole game.
- Turn on font embedding (or PDF/A) in the export options
- Use embedding-permitted fonts for documents that leave the organization
- Use subset embedding when size matters (most programs' default)
- Before sending, confirm every font in the document properties says “Embedded”