Matterhorn 31-010 · PDF/UA-1 UA1:7.21.4.1-2
Font embedded against its licence: a person's check
The font's embedding permission bits forbid the kind of embedding used. Machines can read the flags but the flags may not reflect the actual licence.
The condition, as the protocol states it. “A font program is embedded that is not legally embeddable for unlimited, universal rendering.”
Matterhorn Protocol 1.1, checkpoint 31, index 31-010, section UA1:7.21.4.1-2. The protocol marks this as requiring human judgement.
What a screen reader actually does
No direct effect; this is a licensing condition.
Two requirements that have to be met together
PDF/UA-1 requires the font program for every font used to render text to be embedded in the file — that is 31-009. It also requires that what is embedded be legally embeddable for unlimited, universal rendering. Condition 31-010 is a font that is embedded but should not have been.
Put together, the two leave one honest option when a licence forbids embedding: use a different font. Leaving the font out to respect the licence fails 31-009; embedding it to satisfy 31-009 fails this. Neither is a fix.
Nobody reading the document is affected. The page draws and reads exactly the same whatever the licence says. The condition is about whether the publisher had the right to make the file the way it is — which is why it sits alongside the embedding rule rather than among the conditions about what a reader experiences.
Where the permission is recorded
TrueType and OpenType fonts state their embedding permission in the fsType field of the OS/2 table. The OpenType specification defines the values:
fsType | Name | What it permits |
|---|---|---|
0x0000 | Installable | Embedding, and permanent installation on the reader’s system |
0x0002 | Restricted License | Nothing, without the owner’s explicit permission |
0x0004 | Preview & Print | Embedding for viewing and printing; the document must be opened read-only |
0x0008 | Editable | Embedding, with temporary loading for editing |
0x0100 | No subsetting | (added to the above) the font must be embedded whole |
0x0200 | Bitmap embedding only | (added to the above) only the font’s bitmaps may be embedded |
A PDF normally embeds a font’s outlines, not its bitmaps, so 0x0002 and 0x0200 are the values that say no. 0x0100 allows embedding but not of a subset.
Type 1 fonts have no such field. Their permissions exist only in the licence.
Why a machine cannot settle it
The Matterhorn Protocol marks this condition as one a person decides, and there are three separate reasons.
The flags are not the licence. fsType is the vendor’s machine-readable summary, set when the font was built. The licence agreement under which you obtained the font is the document that governs, and it can be narrower than the flags (embedding allowed, for instance, but not in documents distributed commercially) or broader (a specific permission you negotiated). A checker that reads the flags is reading the summary.
The flags are often not in the PDF. ISO 32000-1 lists the tables an embedded TrueType program has to keep — head, hhea, loca, maxp, cvt , prep, glyf, hmtx, fpgm — and OS/2 is not among them, so a subsetter may drop it. A font embedded as bare CFF has no OS/2 table at all. The evidence can be in the original font file and nowhere in the document.
“Unlimited, universal rendering” needs reading. Installable and Editable plainly permit it. Restricted plainly does not. Preview & Print permits embedding for viewing and printing a read-only document, which describes a PDF well, but whether your licence treats your use that way is a question about the licence.
How to make the decision
- List the embedded fonts.
pdffonts file.pdf(Poppler, free) marks each fontyesornoin itsembcolumn. In Acrobat, Document Properties (File → Properties, orMenu → Document Propertiesin the newer interface) → Fonts lists the fonts and font types, as Adobe describes the tab; it does not show embedding permissions. - Name each family. Drop the six-letter subset prefix:
ABCDEF+SourceSerif4-Regularis Source Serif 4. - Find the licence for the copy that was used. A font that came with the operating system, with an office suite, from a subscription service, from a foundry, or under an open licence each has its own terms. Fonts under the SIL Open Font License may be embedded in documents.
- Read what it says about embedding in documents you distribute. This is the decision.
- Cross-check the flags where you can. For an installed font, Windows shows them in the Font embeddability column of the Fonts control panel in Details view. On any system, fontTools (
ttx -t OS/2 font.ttf) writes the table out andfsTypeis in it. If the licence and the flags disagree, the licence wins, and the disagreement is worth noting. - Record it: the font, where it came from, the licence, the decision, who made it and when. That record is the evidence that this condition was considered at all.
Where violations come from
From producers that do not honour the flags. Acrobat Distiller does honour them: it embeds a font only if the vendor’s setting permits it, and a restricted font produces an error or a substitution instead (Adobe). A file made that way fails 31-009 for the font it could not embed, not this condition. The cases that reach 31-010 are made by software that embeds whatever it is given — and by remediation that embeds a font to clear 31-009 without anyone asking whether it may.
If the answer is no
Change the font in the source to one you are licensed to embed, and re-export. Or obtain a licence that covers embedding for the use you have. Removing the embedded program is not an option: that trades this condition for 31-009.
What Taggart does
Taggart has no check for 31-010, so it produces no finding and never appears in the review queue. It is on the list of conditions Taggart does not check, and that list holds the conformance claim: the PDF/UA identifier is not written until a person confirms it — the checkbox I have checked these conditions by hand, or with another validator in the app. The confirmation covers the whole list at once, so do the licence check above first, and keep the record from step 6 with the file: the report records that the list was confirmed, not what you found.
The only font programs Taggart writes into the files it repairs are for the fourteen standard PDF fonts, when it repairs 31-009: it embeds the programs pdfium draws those fonts with, which are published under pdfium’s BSD-style licence, and the list of changes it reports names that licence. A Taggart repair does not create this condition.
How Taggart handles it
No software can decide this one, and Taggart has no check for it, so it never appears among the findings or in the review queue. It is on the list of conditions Taggart asks you to confirm by hand before it writes the PDF/UA claim into the file — the claim waits until you have.
Whatever Taggart changes, the page still looks identical. Fixes edit the PDF object model, not the content streams, and every remediation is re-rendered and compared against the original at structural similarity ≥ 0.999 before you get the file back. A tool that quietly reflows your document is worse than no tool.
Frequently asked questions
Is this an accessibility problem?
Not for the reader. Nobody hears or sees anything different because a font's licence was broken. It is in PDF/UA because the standard makes embedding mandatory, and a mandatory requirement has to be one you can meet lawfully. The practical consequence is for whoever makes or repairs the file: the font that fixes 31-009 has to be one you are allowed to embed.
Can a tool read the permission from the file?
Sometimes, and not reliably. TrueType and OpenType fonts carry embedding flags in their OS/2 table, but an embedded subset is not required to keep that table, bare CFF and Type 1 programs have no such field, and the flags are the vendor's summary rather than the licence itself. That is why the Matterhorn Protocol makes this a human condition.
If the font says Preview & Print, may I embed it in a PDF?
The OpenType specification defines Preview & Print as permitting embedding for viewing and printing a document opened read-only, which is what a PDF viewer does. Whether that meets 'unlimited, universal rendering' for your document is a reading of the licence you hold, and it is worth recording who made it.
Does Taggart check this?
No. There is no check for 31-010, so it does not appear in the report or in the review queue, and Taggart's conformance statement does not wait for a decision on it. Make and record the decision yourself.
Where this sits in the standards
| Standard | Reference |
|---|---|
| Matterhorn Protocol 1.1 | Checkpoint 31 (Fonts), index 31-010 |
| PDF/UA-1 (ISO 14289-1) | Clause 7.21.4.1-2 |
Related conditions
- 31-009 For a font used by text intended to be rendered the font program is not embeddedPDF/UA-1 requires every font used for visible text to be embedded, so the document renders and extracts identically everywhere. A glyph counts as rendered if the text render mode is not 3.
- 31-011 The embedded font program does not contain glyphs for all referenced glyphsThe subset embedded in the file is missing glyphs the content stream asks for — very common when a document is edited after subsetting.
- 31-012 A glyph present in an embedded Type 1 font program is not listed in CharSetCharSet must accurately list the glyphs in the embedded subset.
Other conditions in checkpoint 31
Checkpoint 31 covers fonts. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.
- 31-001 CIDSystemInfo Registry values are not identicalThe CMap and the descendant CID font must agree on the character collection registry.
- 31-002 CIDSystemInfo Ordering values are not identicalThe CMap and the descendant CID font must agree on the character collection ordering.
- 31-003 CIDSystemInfo Supplement of the CID font is lower than that of the CMapThe font's character collection supplement must be at least as new as the CMap's, or the CMap may reference CIDs the font does not define.
- 31-004 A Type 2 CID font contains neither a stream nor the name Identity as CIDToGIDMapCIDToGIDMap must be either the name /Identity or a stream mapping CIDs to glyph indices.
- 31-005 A Type 2 CID font does not contain a CIDToGIDMap entryThe entry is absent entirely.
- 31-006 A CMap is neither listed in ISO 32000-1 Table 118 nor embeddedA predefined CMap must be one of the standard names; anything else must be embedded in the file.
- 31-007 The WMode entry in a CMap dictionary is not identical to the WMode value in the CMap streamWriting mode (horizontal or vertical) must be declared consistently in the dictionary and the stream.
- 31-008 A CMap references another CMap which is not listed in ISO 32000-1 Table 118A UseCMap chain must terminate at a predefined CMap.
- 31-009 For a font used by text intended to be rendered the font program is not embeddedPDF/UA-1 requires every font used for visible text to be embedded, so the document renders and extracts identically everywhere. A glyph counts as rendered if the text render mode is not 3.
- 31-011 The embedded font program does not contain glyphs for all referenced glyphsThe subset embedded in the file is missing glyphs the content stream asks for — very common when a document is edited after subsetting.
- 31-012 A glyph present in an embedded Type 1 font program is not listed in CharSetCharSet must accurately list the glyphs in the embedded subset.
- 31-013 A glyph listed in CharSet is not present in the Type 1 font programCharSet promises glyphs the font does not contain.
- 31-014 A glyph present in an embedded CID font program is not listed in CIDSetCIDSet must accurately list the CIDs in the embedded subset.
- 31-015 A glyph listed in CIDSet is not present in the CID font programCIDSet promises CIDs the font does not contain.
- 31-016 Glyph widths in the font dictionary and the font program differThe /Widths array must agree with the embedded font program.
- 31-017 A non-symbolic TrueType font has no non-symbolic cmapA font declared non-symbolic must actually carry a (3,1) or (1,0) cmap subtable.
- 31-018 A glyph cannot be looked up by any non-symbolic cmap entrySome rendered glyph is unreachable through the declared cmap tables.
- 31-019 The font dictionary for a non-symbolic TrueType font does not contain an Encoding entryNon-symbolic TrueType fonts must declare an /Encoding.
- 31-020 The Encoding dictionary for a non-symbolic TrueType font does not contain BaseEncodingIf /Encoding is a dictionary it must name a /BaseEncoding.
- 31-021 BaseEncoding is neither MacRomanEncoding nor WinAnsiEncodingOnly MacRomanEncoding and WinAnsiEncoding are permitted for non-symbolic TrueType fonts.
- 31-022 Differences contains glyph names not listed in the Adobe Glyph ListGlyph names in /Differences must be resolvable through the Adobe Glyph List so a processor can derive Unicode.
- 31-023 Differences present but the font has no (3,1) Microsoft Unicode cmapThe Differences array is resolved through the (3,1) cmap; without it the mapping is undefined.
- 31-024 The Encoding entry is present in the font dictionary for a symbolic TrueType fontSymbolic TrueType fonts must not carry an /Encoding; the font's own cmap governs.
- 31-025 The embedded font program for a symbolic TrueType font contains no cmapA symbolic TrueType font must contain at least one cmap subtable.
- 31-026 A symbolic TrueType font has multiple cmaps but none is a (3,0) Microsoft Symbol cmapWith multiple cmaps present, a (3,0) symbol cmap is required to disambiguate.
- 31-027 A font dictionary does not contain the ToUnicode entry and no exemption appliesA ToUnicode CMap is required unless the font uses MacRoman/MacExpert/WinAnsi encoding, or is a Type 1/Type 3 whose glyph names are all in the Adobe Glyph List or the Symbol set, or is a Type 0 whose descendant uses a standard Adobe character collection, or is a non-symbolic TrueType.
- 31-028 Unicode values in the ToUnicode CMap are zeroU+0000 is not a valid mapping target; it usually means the producer could not determine the character and wrote a placeholder.
- 31-029 Unicode values in the ToUnicode CMap are U+FEFF or U+FFFEByte-order marks are not characters and must not appear as mapping targets.
- 31-030 Characters used in text showing operators reference the .notdef glyphThe content stream paints glyph index 0, which is by definition "no glyph" — typically a hollow box or nothing at all.
Check your own file. Taggart’s validator is free and unlimited — 75 of the 87 Matterhorn conditions software can decide, with the other 12 listed for you to confirm; no watermark, no expiry, and no account needed up to 60 pages.
This condition needs a person’s judgement, so there was nothing for a tool to check. Written from ISO 14289-1 and the Matterhorn Protocol on . The Acrobat steps follow Adobe’s documentation and were not walked through by hand. Last updated .