Matterhorn 28-018 · PDF/UA-1 UA1:7.18.8-2

Printer's mark appearance not marked as an artifact

BlockerCheckpoint 28: AnnotationsWCAG 1.3.1 (A)

The content inside a PrinterMark's appearance stream must itself be artifacted.

The condition, as the protocol states it. “The appearance stream of a PrinterMark annotation is not marked as Artifact.”

Matterhorn Protocol 1.1, checkpoint 28, index 28-018, section UA1:7.18.8-2. Software can decide this one on its own.

What a screen reader actually does

Printer marks leak into the content stream as untagged content.

The drawing, not the annotation

A PrinterMark annotation draws its crop mark, registration target or colour bar with an appearance stream — a small form XObject, referenced from /AP, whose content stream holds the painting operators. PDF/UA-1 clause 7.18.8 wants that painting marked as an artifact, the same way a running header on a page is:

32 0 obj                                % the mark's normal appearance, /AP /N
<< /Type /XObject /Subtype /Form /BBox [ 0 0 20 20 ] /Length … >>
stream
/Artifact BMC                           % ← this condition asks for these two lines
0 0 0 RG 0.25 w
0 10 m 20 10 l S                        % horizontal hairline
10 0 m 10 20 l S                        % vertical hairline
EMC
endstream
endobj

Without the /Artifact … EMC pair, the two hairlines are painting that is neither tagged content nor an artifact — the same kind of loose content as 01-005, inside an annotation instead of on the page.

Condition 28-017 is the other half of the clause: the annotation itself must not be referenced from the structure tree. A file can fail either without the other, and fixing one does nothing for the other.

Why a producer misses it

Most annotation appearances need no marking at all. A comment’s icon, a link’s border or a form field’s box are drawn in appearance streams that are not page content, and producers leave them unmarked. Printer’s marks are the exception PDF/UA-1 singles out, so a producer that is careful about artifacts on the page — headers, footers, page numbers — can still write printer’s marks with bare operators, simply because the rule for them is unlike the rule for every other annotation.

What it costs a reader is indirect, and it is the same cost as any loose content: software that sorts everything painted into tagged, artifact or unaccounted for finds these marks in the third pile, and has to guess what they are. The clause exists so that nothing has to guess about a crop mark.

How to check it free

veraPDF will not tell you. Its PDF/UA-1 profile has a single test under clause 7.18.8 — “A PrinterMark annotation is included in logical structure” — which is 28-017. No test in the profile reads a printer’s mark’s appearance stream.

Acrobat has no documented view of the marked content inside an annotation’s appearance.

A few lines of Python with the free pikepdf library will show you the start of each mark’s appearance stream:

import pikepdf

with pikepdf.open("proof.pdf") as pdf:
    for number, page in enumerate(pdf.pages, start=1):
        for annot in page.get("/Annots", []):
            if annot.get("/Subtype") != "/PrinterMark":
                continue
            normal = annot.get("/AP", {}).get("/N")
            if isinstance(normal, pikepdf.Stream):
                print(number, annot.get("/MN"), normal.read_bytes()[:60])

A stream that does not begin with /Artifact BMC (or /Artifact <<…>> BDC) and end with EMC is the condition.

How to fix it free

Acrobat has no documented way to edit an annotation’s appearance stream, so the free repair is either at object level or upstream.

Wrap the stream. Wrapping changes no pixel — BMC and EMC paint nothing — and is the whole repair:

with pikepdf.open("proof.pdf") as pdf:
    for page in pdf.pages:
        for annot in page.get("/Annots", []):
            normal = annot.get("/AP", {}).get("/N")
            if annot.get("/Subtype") == "/PrinterMark" and isinstance(normal, pikepdf.Stream):
                body = normal.read_bytes()
                if not body.lstrip().startswith(b"/Artifact"):
                    normal.write(b"/Artifact BMC\n" + body + b"\nEMC\n")
    pdf.save("proof-fixed.pdf")

Or drop the marks from the edition people read. A file meant for the screen does not need registration targets. If the marks were added at export, export without them; if they were added afterwards, keep the print-ready file for the press and publish one without.

Adobe notes that a PDF exported from InDesign can carry printer marks on a separate layer or directly on the page — the Layers tab shows which — and documents Acrobat’s own way of adding them as All tools → Use print production → Add printer marks (Adobe: Printer marks and hairlines). Neither note says whether the marks are written as PrinterMark annotations, which are the only kind this condition is about. The script above lists the ones that are.

What Taggart does

The check reads each PrinterMark annotation’s normal appearance stream and reports it when the stream contains no /Artifact marked-content tag:

The appearance stream of a PrinterMark annotation on page 1 does not mark its content as an /Artifact.

It is a presence test: a stream with an /Artifact tag anywhere in it passes, whether or not every painting operator is inside it. It reads one stream: a mark whose normal appearance is a set of named states rather than a single stream is reported whatever the states contain. Like the 28-017 check, it reports marks that are hidden or outside the crop box as well.

There is no repair for this condition. Taggart’s printer-mark repair, printermark-artifact, removes the annotation from the structure tree — that is 28-017 — and does not open the appearance stream. On a file with both conditions, Fix All Safe clears 28-017 — subject to the caveat on that page — and leaves this finding standing. Wrap the stream as above, or remove the marks, and check again.

How Taggart handles it

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

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

If the printer's mark is not in the tag tree, why does its drawing matter?

Because they are two different things in the file. 28-017 is about the annotation being referenced from the structure tree. This condition is about the marks it paints: the appearance stream is a content stream like any other, and painting in it that is neither tagged nor marked as an artifact is content nobody has accounted for. PDF/UA-1 asks for both halves.

veraPDF passed my file. Is it fine?

Not necessarily. veraPDF's PDF/UA-1 profile has one test under clause 7.18.8, and it is about the structure tree. Nothing in it reads the appearance stream, so a clean veraPDF report says nothing either way about this condition.

Does Taggart fix this?

No. The printer-mark repair takes the annotation out of the structure tree, which is 28-017, and leaves the appearance stream as it was. On a file with both conditions, Fix All Safe clears 28-017 and this finding remains. Wrap the stream yourself, as shown on this page, or remove the marks.

Where this sits in the standards

Standards this condition maps to
StandardReference
Matterhorn Protocol 1.1Checkpoint 28 (Annotations), index 28-018
PDF/UA-1 (ISO 14289-1)Clause 7.18.8-2
WCAG 2.11.3.1 Info and Relationships — 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 .