Private PDF font preflight · CSV and JSON

PDF font checker: embedded, subset, ToUnicode, type, and encoding

Find every font dictionary referenced by a PDF page or Form XObject. See whether the actual font program is embedded, whether it is a subset, which encoding and subtype it uses, whether a ToUnicode map exists, and which pages reference it.

Quick answer

“The font name appears” does not prove the font is embedded.

This checker looks for the actual PDF font-program evidence: FontFile, FontFile2, FontFile3, or Type 3 glyph definitions. It separately reports Adobe’s six-letter subset prefix and ToUnicode map presence, then runs a real text-extraction health check instead of treating one signal as a universal pass.

No PDF upload

Inspect the fonts inside your PDF

Analyzed on this device
Drop a PDF here or choose a file from this device The PDF bytes are inspected by your browser and are not sent to a conversion server.

Ready. Choose a PDF to inspect its font resources.

What each font result means

Embedded

The PDF contains a font-program stream or Type 3 glyph definitions. Adobe explains that embedding prevents substitution when the original font is unavailable.

Embedded subset

Only required glyphs are stored. Adobe identifies subsets with a six-letter prefix plus a “+”, such as ABCDEF+FontName.

ToUnicode present

An explicit character-code-to-Unicode map exists. It is useful evidence for extraction, but not a complete accessibility or copy/paste verdict.

Not embedded

No font program was found. Another system may substitute a locally available font; shape and spacing are not guaranteed to match.

Sources: Adobe’s font embedding and substitution overview, Adobe’s subset naming and font settings reference, and the published PDF 1.7 specification.

How to read the preflight result

FindingWhat it provesWhat it does not provePractical action
EmbeddedA font program or Type 3 glyph data is inside the PDF.Correct glyph coverage, licensing, PDF/A, PDF/X, or accessibility.Check extraction and the intended compliance profile separately.
Embedded subsetThe PDF has a subset-named font object and embedded program.That unused glyphs are available for future editing.Usually fine for display and print; re-export from source before major text edits.
Not embeddedNo FontFile stream or Type 3 glyph data was found.That substitution has already occurred or the page currently looks wrong.Re-export from the source application with font embedding enabled.
ToUnicode absentNo explicit map exists on that font object.That text extraction must fail; standard encodings can still work.Use the separate extraction result and test copy/search with representative text.
No font resourcesNo page or Form XObject font dictionaries were found.That the page is empty.It may be a scan or outlined artwork; use OCR if visible text is rasterized.
Type 3Glyph shapes are defined as PDF graphics and travel with the file.Normal TrueType/OpenType behavior or easy text editing.Ask the printer or submission system whether Type 3 fonts are accepted.

Print, archive, and submission requirements

Adobe’s PDF settings documentation says font embedding is required for PDF/X compliance. The PDF Association’s PDF/X summary likewise states that fonts must be fully embedded or subset with all used characters present. The PDF/A FAQ notes that creation software normally warns when a font cannot be embedded.

This checker is a focused diagnostic, not a PDF/A or PDF/X validator. Those standards add color, metadata, transparency, output-intent, encryption, annotation, and other requirements. Passing the font test is necessary in many print/archive workflows but is not sufficient for compliance.

Reproducible font stress fixture

The deterministic three-page fixture contains four font resources: unembedded Helvetica and Times-Roman, embedded Bitstream Vera regular and bold TrueType subsets with ToUnicode maps, and one font-free page. Poppler pdffonts independently validates the expected embedding, subset, and Unicode columns.

Download the font stress PDF Expected results and SHA-256 · Independent Poppler output

How this checker works

  1. Read the PDF object graph.

    PDF-LIB 1.17.1 opens the local bytes and visits each page’s font resource dictionary, including font dictionaries inside Form XObjects.

  2. Resolve composite fonts.

    Type 0 fonts can point to CIDFont descendants. The checker follows the descendant to find its subtype and FontDescriptor.

  3. Check real embedding evidence.

    FontFile, FontFile2, and FontFile3 streams indicate embedded font programs. Type 3 fonts carry glyph definitions through CharProcs and are reported separately.

  4. Report subset and character mapping separately.

    The six-letter prefix is used for subset detection. ToUnicode map presence remains its own field because embedding and character mapping solve different problems.

  5. Test extraction with another engine.

    PDF.js extracts text from every page and counts empty pages, replacement characters, and private-use characters. The extraction result does not grade itself from the font dictionary.

  6. Keep the evidence exportable.

    CSV contains one row per font object. JSON preserves document summary, extraction evidence, object IDs, page references, program bytes, and resource names.

Limitations and assumptions

A PDF may contain font resources that are no longer used by visible text; Adobe documents that font lists can include referenced but unused resources. This tool therefore reports resource pages rather than claiming exact glyph usage. Dynamically generated content, unusual malformed objects, encrypted PDFs, and font resources hidden behind unsupported object structures can require a full desktop preflight engine.

Subset detection follows Adobe’s six-uppercase-letter prefix convention. A producer can use an unusual name, so the embedded stream check is authoritative for embedding while the name is the evidence for subsetting. ToUnicode absence is an advisory, not an automatic failure. The checker does not extract or offer embedded font files, avoiding unnecessary font-licensing risk.

The first inspection may download PDF-LIB and PDF.js from jsDelivr. The chosen PDF remains in local browser memory and is not sent to GoPDFConverter, analytics, or a conversion server.

Frequently asked questions

How do I check whether fonts are embedded in a PDF?
Choose the PDF above. Embedded means the corresponding font dictionary has a FontFile, FontFile2, FontFile3, or Type 3 glyph definition inside the PDF. The table lists each object and its evidence.
Is an embedded subset a problem?
Usually not for viewing or printing. The subset contains glyphs used by that PDF and reduces size. Editing later may require glyphs or font data that were not included, so substantial edits are safer in the source document.
Does a missing ToUnicode map mean text is not searchable?
Not always. Simple standard encodings can still extract correctly. The checker reports ToUnicode as explicit mapping evidence and separately runs a real PDF.js extraction check.
Why can a font appear more than once?
Edited or merged PDFs can retain multiple font objects or subsets for the same family. Each object can have a different encoding, subset, or embedded stream, so the report keeps them separate.

Related diagnostics

PDF page size and box checker

Inspect MediaBox, CropBox, TrimBox, BleedBox, rotation, mixed dimensions, and exact print sizes.

PDF and Word fidelity challenge

See how fonts, Unicode, page breaks, columns, tables, and images survived controlled browser conversions.

PDF text extractor

Extract and inspect the actual searchable text layer locally.

OCR scanned PDF

Recognize visible text when pages contain images instead of font-backed text objects.