PDFPipe

Accessibility and structure / Artifacts and real content

PDF artifacts: page furniture that is not content

The distinction between content that belongs in the reading order and page furniture that does not, marked in the content stream so a screen reader can skip the furniture.

Where this API stands

This API does not produce this standard, and there is no option that would. What follows is what the requirement actually is and where a rendered document stands against it. This API writes no marked content operators, so nothing in its output is distinguished as an artifact. This one is worth being precise about because the API has features that produce exactly the content in question: the `header_html` and `footer_html` fragments draw running content on every page, and those fragments substitute the pageNumber, totalPages, date, title and url tokens, which is page furniture by definition. Any watermark you draw as a background is the same category. None of that is marked as an artifact today, so a later tagging pass has to be told which parts of the page are furniture, and the fragments are the easiest possible thing to point at when that conversation happens.

What the standard requires

The requirements as a checker enforces them, rather than as a procurement document paraphrases them. A file satisfies all of these or it satisfies none of them.

  • Page furniture is wrapped in the /Artifact marked content operator rather than given a structure element, which is what removes it from the reading order.
  • Artifacts carry a subtype: /Pagination for running headers, footers and page numbers, /Layout for rules and decorative boxes, /Page for cut marks and similar, /Background for watermarks and background fills.
  • Every mark on the page is either real content in the structure tree or an artifact, and PDF/UA treats anything that is neither as a failure.
  • A repeated running header is an artifact on every page it appears on, and the content it repeats appears once in the tree at the point it actually belongs.
  • A decorative image is an artifact, which is a different mechanism from giving it empty alternative text, and PDF/UA cares which one you used.

Who asks for this

Accessibility audits, and the symptom that sends people looking is a screen reader announcing "Page 4 of 12" in the middle of a sentence, once per page, through a whole document. It is one of the more visible failures because it is audible on the first page.

What it looks like in a file

The concrete form of the thing being described, so you can recognise it in a document you have been handed rather than only in a specification.

json
<!-- Page furniture belongs in the footer fragment, not repeated in the
     body. These five class names are substituted at render time.
     Styles must be inline: the fragment does not inherit the document
     stylesheet, and the default size is very small. -->
{
  "options": {
    "footer_html": "<div style=\"font-size:8pt;width:100%;text-align:center;color:#666\">Page <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span></div>"
  }
}

What to do about it

Keep page furniture out of the flowed content and produce it through the header and footer fragments rather than by repeating markup in the body. That is worth doing for its own sake, and it also means that when a remediation pass runs, the furniture is visually and structurally separable from the content instead of interleaved with it. Where a watermark is required, draw it as a background rather than as an inline element for the same reason.

How to check a file rather than assume

PAC 2024 reports untagged content, which is where anything that is neither structure nor artifact shows up. Acrobat's Content panel shows the marked content sequences on each page and lets you convert an item to an artifact. The audible test is faster than either: have a screen reader read two consecutive pages and listen for the footer.

The mistake people make here

Tagging the running header as a heading. Auto-tagging often does this, because a bold line at the top of every page looks exactly like an /H1, and the result is a document whose outline contains the same heading twelve times. It is worse than leaving it untagged, because it corrupts the navigation control a screen reader user relies on.

Frequently asked

Does this API produce Artifacts and real content?

Not produced by this API. This API writes no marked content operators, so nothing in its output is distinguished as an artifact. This one is worth being precise about because the API has features that produce exactly the content in question: the `header_html` and `footer_html` fragments draw running content on every page, and those fragments substitute the pageNumber, totalPages, date, title and url tokens, which is page furniture by definition. Any watermark you draw as a background is the same category. None of that is marked as an artifact today, so a later tagging pass has to be told which parts of the page are furniture, and the fragments are the easiest possible thing to point at when that conversation happens.

Can I turn on the pdf_a option and be done?

No. The option writes an XMP packet declaring PDF/A-1b into the document catalogue, and the render response comes back carrying a warning that says in as many words that this is best-effort and that full conformance requires tagged structure and an embedded ICC profile. It is a claim written into the file, not a certificate earned by it, and a validator checks the claim against the bytes. Read the warning array in the response rather than taking the absence of an error as a pass.

Should I convert before rendering or after?

After, always. A conformance converter rewrites colour, embeds profiles, sets boxes and stamps metadata on a finished PDF. Trying to satisfy a conformance target from the source side means guessing at what the converter would have done, and the guesses that go wrong are expensive: flattening transparency you did not need to flatten changes what the page looks like.

Standards this one is confused with

The neighbours that matter are the ones people mistake for this, not the ones that sort next to it.

Conformance is decided after a file exists. Render the document, then check it, then convert only what the checker actually flags.