WCAG 2.2 AA checks for generated PDFs

Evidence, not a certification. This page publishes automated checks on the listed source HTML and generated PDFs, with tool versions, raw reports, and hashes.

WCAG is a property of the final document, not just the API. Fork PDF runs automated checks on generated PDFs and the source HTML used to produce them. The samples below cover headings, paragraphs, lists, tables, links, images with alt text, and a multi-page document.

HTML to PDF mapping

The PDF is generated from the source HTML. Alt text, reading order, and document structure come from that source.

Source HTMLPDF outputPreserved
h1–h6H1–H6Text, heading level, and page order.
p and text nodesP / Span tagged contentText content and source order.
ul, ol, liL, LI, LBodyList item text and order.
table, th, tdTable, TR, TH, TDRow, header, and cell structure with header and cell text.
a hrefLink plus link annotationLink text, URI, and annotation bounds.
img alt and svg role="img" aria-labelFigure with AltAlt text is written verbatim from the source HTML.
Text runsEmbedded fonts with ToUnicodeExtractable words and copy/paste text.

What we test

  • Travel itinerary: four-page PDF and its rendered source HTML.
  • Invoice: headings, line items, table cells, and totals.
  • Link and image: a link annotation plus an image with alt text.
  • Multi-link: three links across two pages.

Evidence version and provenance

Evidence version: 2026-10-31. Results apply to the exact source and PDF files listed below. The manifest records tool versions, file sizes, and hashes. hashes.txt verifies the evidence set with sha256sum -c hashes.txt.

SampleSource HTMLPDFPDF SHA-256
Travel itineraryitinerary.htmlitinerary-wcag.pdfbf89547e495b5cc608460d453f09503c85d00295496fb2555a5a55805fe4c589
Invoiceinvoice.htmlinvoice-wcag.pdfeb5eaeb558eb279055c35365b450f75b64f6c7c6660db42fbc9c6f348d0a4a4e
Link + imagelinks.htmllinks-wcag.pdf05b4838c1b14402b7f7aca5dab5d5512d744bd148d521db7251dc3affd5cde84
Multi-linkmultilink.htmlmultilink-wcag.pdf24973e6fa1e08c72f5c32f55da313de63b3c4de2c87d9dfd25beeeef46959555

Automated results

Sampleaxe-core HTMLaxes4 WCAGNotes
Travel itinerary0 violations, 1 incomplete0 errors / 0 warningsIncomplete is SVG color contrast; calculated contrast passes. PDF.js extracts whole words.
Invoice0 violations, 0 incomplete0 errors / 0 warningsHeadings, table, and totals pass
Link + image0 violations, 0 incomplete0 errors / 0 warningsLink annotation and image alt pass
Multi-linkNot audited as HTML0 errors / 0 warningsThree link annotations across two pages

axe-core 4.10.2 and Chromium 151.0.7880.0 ran at 1280×900 and 320×900. The axes4 WCAG2CheckSet ran on the generated PDFs; job IDs and raw reports are included in the evidence bundle. PDF.js 4.10.38 produced the text-extraction evidence for the itinerary. PDF/UA evidence is published separately and is not used for this WCAG result.

Known limitations

  • The travel itinerary is a fixed A4 layout. WCAG 1.4.10 reflow is not demonstrated at 320 CSS px.
  • Avoid CSS letter-spacing on text that must be extracted. Position-based PDF readers can insert spaces between glyphs even when the visual text is correct.

Download the evidence

FileDetails
wcag-2.2-aa-proof.zipComplete evidence bundle: sample PDFs, source HTML, raw tool reports, manifest, and hashes.
itinerary-wcag.pdfFour-page travel itinerary.
invoice-wcag.pdfInvoice with headings and a table.
links-wcag.pdfLink and image sample.
multilink-wcag.pdfThree links across two pages.
manifest.jsonEvidence version, tool versions, sample hashes, result counts, and file hashes.
axe-results.jsonFull axe-core results, including incomplete-node details, at both widths.
axes4-summary.jsonaxes4 counts and job IDs for all four PDFs.
axes4 raw reportsitinerary, invoice, links, and multilink.
contrast-calculations.txtColor pairs, ratios, and the calculation method for the SVG map.
pdfjs-text-extraction.txtPDF.js text extraction from the fixed itinerary sample.
hashes.txtSHA-256 values for the evidence files. Verify with sha256sum -c hashes.txt.
zip-hash.txtSHA-256 of the evidence bundle. Verify with sha256sum -c zip-hash.txt.

Reproduce

  1. Download the evidence bundle and run sha256sum -c hashes.txt.
  2. Open the source HTML from the provenance table and run axe-core 4.10.2 at 1280×900 and 320×900. Compare the violations and incomplete results with axe-results.json.
  3. Upload the four PDFs to axes4 WCAG2CheckSet. Compare the errors, warnings, and job IDs with axes4-summary.json and the raw reports. axes4 access is required.
  4. Run PDF.js 4.10.38 text extraction on itinerary-wcag.pdf and compare it with pdfjs-text-extraction.txt.

Evidence history

2026-10-31 — Evidence bundle refreshed with source HTML, full axe results, raw axes4 reports, an evidence manifest, and hashes.

This page

Automated page check: axe-core 4.10.2 reported 0 violations and 0 incomplete results at 1280×900 and 320×900 on 2026-10-31. page-axe-results.json

Report an evidence error

If a file, hash, or result on this page is wrong, contact us with the page URL and evidence version 2026-10-31.

Need a full accessibility audit?

Use this page as a starting point, not as legal advice or a conformance certificate. This page reports automated checks only. Contact us if you need help scoping manual testing or remediation.