Matterhorn 28-006 · PDF/UA-1 UA1:7.18.2-1

Unknown annotation subtype: tag it and describe it

BlockerCheckpoint 28: AnnotationsWCAG 4.1.2 (A)

A custom annotation subtype still has to be placed in the structure tree and described.

The condition, as the protocol states it. “An annotation with subtype undefined in ISO 32000 does not meet 7.18.1.”

Matterhorn Protocol 1.1, checkpoint 28, index 28-006, section UA1:7.18.2-1. Software can decide this one on its own.

What a screen reader actually does

An unknown annotation type with no description is skipped.

What “undefined in ISO 32000” means

Every annotation has a /Subtype. ISO 32000 defines a fixed list of them: /Text, /Link, /FreeText, /Line, /Square, /Circle, /Polygon, /PolyLine, the text markups, /Stamp, /Caret, /Ink, /Popup, /FileAttachment, /Sound, /Movie, /Widget, /Screen, /PrinterMark, /TrapNet, /Watermark, /3D, /Redact, and in PDF 2.0 /RichMedia and /Projection. A plug-in or a specialist markup application can write a subtype of its own:

10 0 obj
<< /Type /Annot
   /Subtype /ACMEReviewMark          % not in ISO 32000
   /Rect [ 400 735 520 755 ]
   /F 4
   /AP << /N 11 0 R >>               % how it looks
>>                                   % no /Contents, no /StructParent
endobj

A viewer that does not know the type knows nothing about what it means. PDF/UA-1 clause 7.18.2 does not forbid it. It says such an annotation still has to meet the general annotation requirements of 7.18.1: be part of the structure tree, inside an <Annot> element, and carry a description. Condition 28-006 is a custom-subtype annotation that does not.

What a screen-reader user gets

Nothing, usually. With no structure element the annotation is not in the reading order, and with no description there is nothing to say about it except its type, which here is a name a vendor made up. Whatever the mark was for (checked, query, superseded) is visible on the page and absent from the reading.

Where it comes from

Plug-ins and specialist applications that add their own kind of mark: a review stamp, a measurement marker, a workflow flag. The software that defines the mark knows what it means; nothing obliges it to write that meaning down, or to put the mark in the structure tree, and a file made before anyone thought about tagging gets neither.

How to check it free

qpdf. Write the readable form and look at the /Subtype of every annotation:

qpdf --qdf --object-streams=disable plan.pdf readable.pdf

Search for /Type /Annot and compare each subtype with the list above.

veraPDF’s PDF/UA-1 profile has no rule aimed at unknown subtypes. Its general annotation rules under clause 7.18.1, nesting in <Annot> and a description in /Contents or /Alt, apply to every annotation, unknown types included.

Acrobat Pro’s Content panel lists each page’s annotations, and the Tags panel’s Find searches for unmarked annotations (Edit document structure with the Content and Tags panels). Adobe does not say how either presents a subtype Acrobat does not recognise.

How to fix it free

Ask the producing application first. If it can export its marks as standard annotations, or flatten them into the page, the problem goes away at source.

Tag it in Acrobat Pro. In the Tags panel, choose Find from the options menu, look for the annotation among the unmarked items, and use Tag Element with the type Annotation, the procedure Adobe documents for unmarked comments. To describe it, select the new tag, choose Properties from the options menu, and on the Tag tab type into Alternate Text. That satisfies the standard’s description rule, 28-004, but see below for what Taggart checks here.

Add /Contents by hand. In the readable qpdf file, add /Contents (Reviewer's tick: checked against survey) to the annotation dictionary, then repair the offsets and write a normal file:

fix-qdf readable.pdf > edited.pdf
qpdf edited.pdf plan-fixed.pdf

What Taggart does

Taggart treats a subtype as defined if it is on the list above. For any other subtype, on an annotation not flagged Hidden or NoView, it checks two things and reports the first one that fails:

An annotation with the non-standard subtype /ACMEReviewMark on page 1 is not referenced from the structure tree, so it does not meet 7.18.1.

An annotation with the non-standard subtype /ACMEReviewMark on page 1 has no /Contents description, so it does not meet 7.18.1.

Two details of the check matter. It asks whether the annotation is in the structure tree, not under which element; an unknown subtype inside a <P> passes, and 28-002, which is the <Annot> rule, does not look at subtypes it does not know. And for the description it reads /Contents on the annotation, not /Alt on the element.

The structure half is repaired automatically. The repair is annotation-structure, marked safe, so Fix All Safe applies it. It creates an <Annot> element with an /OBJR to the annotation, places it where the annotation’s rectangle sits (inside the element whose content it overlaps, or before the first element below it, or at the end of the tree when there is neither, and the change log says which), and registers the annotation in the parent tree.

The description is not. Taggart does not invent one. After the structural repair, the same annotation is reported again, this time for its missing /Contents. The description has to come from a person, and the app does not yet take one for an annotation, so it goes in by hand — the /Contents edit under How to fix it free above — or in the program that made the mark. With the <Annot> element from the repair and a /Contents description both in place, this condition and 28-004 clear.

How Taggart handles it

Taggart checks for this condition automatically and reports it as a blocker, with where in the file it found it.

The fix is Place annotations in the structure tree. It is mechanical, so “Fix All Safe” applies it along with the others in one pass and lists what it changed. Your original file is never modified.

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

Are custom annotation types allowed in PDF/UA at all?

Yes. PDF/UA-1 does not ban them; it holds them to the same rules as every other annotation. They must be in the structure tree and they must be described, which is what this condition checks.

Is an /Alt on the <Annot> element enough?

For the standard's description requirement, yes: PDF/UA accepts either /Contents on the annotation or an alternative description on its element, which is condition 28-004. Taggart's check for this condition looks for /Contents on the annotation itself, so a description given only as /Alt clears 28-004 and leaves this finding open.

Which subtypes does Taggart count as defined?

The ones ISO 32000-1 lists, from Text and Link through Watermark, 3D and Redact, plus RichMedia and Projection, which came with ISO 32000-2. Any other subtype name is reported under this condition if it is missing either piece.

Does a hidden one count?

No. Taggart leaves out annotations flagged Hidden or NoView, and Popup annotations, as outside the annotation requirements. A hidden annotation is not presented to anyone, so there is nothing for a reader to miss.

Where this sits in the standards

Standards this condition maps to
StandardReference
Matterhorn Protocol 1.1Checkpoint 28 (Annotations), index 28-006
PDF/UA-1 (ISO 14289-1)Clause 7.18.2-1
WCAG 2.14.1.2 Name, Role, Value — Level A
EN 301 549 / Section 508 / ADA Title IIAll three point at WCAG 2.1 Level AA for non-web documents, so a Level A or AA criterion here is in scope for each of them.

Other conditions in checkpoint 28

Checkpoint 28 covers annotations. These are its other failure conditions; the ones without a link are in the rule set but do not have a written page yet.

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.

Check a PDF free

Checked with Taggart on a generated file that fails this condition on . The Acrobat steps follow Adobe’s documentation and were not walked through by hand. Last updated .