Open a PDF anywhere, your phone, a colleague's old laptop, a kiosk in an airport, and the document looks the same. The fonts render correctly even if the device has never heard of them. This is the magic of embedded fonts: the PDF carries the font data inside it. Understanding font embedding helps you produce reliable PDFs and diagnose problems when something goes wrong. This guide walks through the topic.
Why embed fonts at all
A PDF can reference fonts in two ways:
- By name only, the reader uses an installed font of the same name. If not available, substitute.
- Embedded, the font data is included in the PDF. Always renders correctly.
The first sounds tempting (smaller file size) but produces unpredictable results. The second is the modern default.
Embedding ensures:
- Identical visual on every device
- No font licensing concerns for the recipient
- Long-term archival viability
- Print fidelity matches screen
Embedding methods
When fonts are embedded, the PDF typically embeds a subset:
- Full embedding, entire font included
- Subset embedding, only the characters used in the document are included
Subsetting is the standard. It dramatically reduces file size, a font is 100-500 KB but a typical document uses only a few dozen characters, so the subset is a few KB.
Font types in PDF
PDFs support several font formats:
- Type 1, original PostScript font format. Older but still used.
- TrueType (TTF), Apple/Microsoft format. Common.
- OpenType (OTF), modern unified format. Most modern fonts.
- CFF (Compact Font Format), an embedding format within OpenType
- Composite (Type 0) fonts, for Asian and other large-character-set fonts
Modern PDFs typically use TrueType or OpenType for Latin scripts and composite Type 0 for Asian scripts.
Font licensing and embedding
Fonts have licenses that govern embedding:
- Editable embedding, recipient can edit text in the font
- Print and preview embedding, recipient can view and print but not edit
- Installable embedding, recipient can extract and install the font
- No embedding, font cannot be embedded at all
Most commercial fonts allow print-and-preview embedding (sufficient for typical PDF use). Some restrict editing. Some specialized fonts (foundry-licensed) may forbid embedding entirely.
PDF producers honor these flags. A font with "no embedding" cannot be embedded by Acrobat or other compliant tools.
Checking embedded fonts
To see which fonts are embedded:
Adobe Acrobat / Reader: File → Properties → Fonts tab. Lists every font used; shows whether each is embedded.
pdffonts file.pdf (poppler-utils). Lists all fonts with embed status. See poppler-utils introduction.
name type encoding emb sub uni object ID
------------------------------------ ----------------- ---------------- --- --- --- ---------
AAAAAA+Helvetica TrueType WinAnsi yes yes yes 7 0
BBBBBB+Times-Roman Type 1 Custom yes yes yes 12 0
Arial TrueType WinAnsi no no no 18 0
The emb column tells you embedded status. yes is good; no means the font is referenced but not embedded.
What happens when fonts are not embedded
If a PDF references a font without embedding it:
- Reader has the font, fine, looks correct
- Reader does not have the font, substitutes with similar font. Visual differs.
Substitution behavior:
- Acrobat substitutes from its built-in font library; usually close visually
- Other readers may substitute differently; results vary
The risk: a PDF that looks fine on your machine looks wrong on someone else's. The fix: embed.
Producing PDFs with proper embedding
Microsoft Word. Defaults to embed fonts. File → Options → Save → "Embed fonts in the file." Usually on by default.
LibreOffice. Tools → Options → Load/Save → General → "Embed fonts when saving" (also in PDF export options).
Adobe InDesign. Embeds fonts on PDF export by default.
LaTeX. Use pdflatex (not the older latex followed by dvips); embed fonts via package options.
Programmatic generators (ReportLab, iText). Specify font embedding in code.
For most modern authoring tools, embedding is the default. The problem is older tools or specific configurations that turn it off.
Forcing embedding after the fact
If you receive a PDF with non-embedded fonts, you can sometimes force embedding:
Adobe Acrobat Pro: Tools → Print Production → Preflight → "Embed missing fonts" profile.
Ghostscript:
gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite \
-dEmbedAllFonts=true -dSubsetFonts=true \
-sOutputFile=embedded.pdf input.pdf
This re-renders the PDF with all fonts embedded. See Ghostscript introduction.
If the source font is not available on your system, Ghostscript substitutes. The result has consistent fonts but may not match the original.
Common gotchas
"Embedded" but only partially. A subset embedding includes only used characters. If you later edit the PDF and add new characters not in the subset, those characters cannot render. Embed a larger subset or all characters if you anticipate editing.
License-restricted fonts. Some fonts cannot be legally embedded. PDF producers check the font's fsType flag and refuse to embed if not allowed.
Asian language fonts. Chinese, Japanese, Korean fonts contain thousands of characters. Embedding them all bloats file size. Subset embedding is essential. Tools may default to embedding too much; check pdffonts to see size impact.
Mac/Windows font naming differences. A font called "Helvetica" on Mac may be slightly different from "Helvetica" on Windows. Substitution falls back to a different visual.
Standard 14 PDF fonts. PDFs can reference 14 "standard" fonts (Helvetica, Times, Courier, Symbol, ZapfDingbats variants) without embedding. Every PDF reader has these. They are the only fonts safe to not embed; for everything else, embed.
Re-saving strips embedding. Some PDF tools, when saving, may drop embedded fonts if the tool doesn't have them locally. Verify embedding after editing.
Font fingerprinting. Embedded fonts in PDFs sometimes uniquely identify the producer. For privacy-sensitive workflows, use standard fonts.
Tagged PDF compatibility. Embedded fonts must have proper ToUnicode mapping for tagged PDFs to work correctly. Some embeddings lack this, breaking text extraction and accessibility.
Embedding and file size
Font embedding adds to file size:
- Per font: ~50-500 KB for a Latin font; potentially many MB for an Asian font
- Multiple fonts: size grows linearly
For typical documents:
- 1-3 fonts: minor size impact
- 5-10 fonts: noticeable
- 20+ fonts: significant
If file size matters, consolidate to fewer fonts before generating the PDF.
Embedding and accessibility
Embedded fonts must have:
- Proper ToUnicode mapping so screen readers can announce characters correctly
- Standard character encoding (or properly-mapped custom encoding)
Without these, embedded fonts may display visually but fail for accessibility and text extraction.
Embedding and archival
For long-term archival, embedding is essential:
- PDF/A requires all fonts to be embedded, see PDF/A archival format explained
- Decades from now, the font may not exist outside the file. Embedding preserves visual integrity.
For archival workflows, always embed.
Font substitution rules
When a reader encounters a non-embedded font:
- Look for exact match by name in system fonts
- Look for substitution by font metric (width, x-height, etc.)
- Fall back to default font (typically Helvetica or Times)
Acrobat's substitution is most sophisticated. Other readers may substitute more aggressively.
Programmatic font handling
For automated PDF generation:
# Pseudocode
font = load_font("CustomBrandFont.ttf")
pdf.embed_font(font, subset=True)
pdf.set_font("CustomBrandFont", 12)
pdf.add_text("Hello, world.")
Most PDF libraries (ReportLab, iText, PDFKit) support font embedding straightforwardly.
Inspecting font issues
If a PDF has font problems:
- Run
pdffontsto list font situation - Identify which fonts are not embedded
- Decide: re-render with embedded fonts, or get the source
For non-embedded fonts you cannot install:
- Re-render with substitute (Ghostscript)
- Accept the visual will differ from original
Practical recipe
For a PDF you produce:
- Use standard fonts (Times, Helvetica, etc.) when possible
- Embed all non-standard fonts during PDF generation
- Verify with
pdffontsafter generation
For a PDF you receive:
- Run
pdffonts file.pdfto see embedding status - If non-embedded fonts cause display issues, re-render with Ghostscript
- Save the embedded version for future use
Takeaway
Embedded fonts are what make PDFs portable. Subset embedding gives near-zero file size cost for full visual fidelity. Modern authoring tools embed by default; verify and correct when they don't. For archival, embedding is mandatory (PDF/A). For accessibility, embedding plus proper ToUnicode mapping is required. For browser-based PDF operations alongside font issues, Docento.app handles common tasks. For related topics, see troubleshooting PDF fonts not displaying, how to change font in PDF, and PDF/A archival format explained.