Skip to content

Accessible PDF generation

Accessible PDF Generation from HTML: Tagged PDF, ADA Compliant PDF and Section 508 Output

Generated documents are now inside the accessibility rules that used to apply only to web pages. This page covers what a tagged PDF actually gives you, which rendering engines emit one, and what US buyers are being asked to prove in 2026. Render any markup with the tool below while you read.

  • Early access, launching soon
  • No card required
  • Your HTML stays yours

Live demo

Runs in your browser. Nothing is uploaded.

Your PDF is downloading. Want this as one API call, with the page archived too?

Short answer

A PDF is accessible when it carries a tag structure that tells assistive technology what each piece of content is and in what order to read it. For documents generated from HTML, that structure comes from your markup: headless Chromium, Prince, PDFReactor and WeasyPrint all convert semantic HTML into PDF tags, so headings, lists, tables and alt text survive into the file. The gap buyers keep hitting is that tagged is not the same as conformant. Only some engines target PDF/UA-1 (ISO 14289-1), and even those that do decline to guarantee a valid file. Two US regimes drive the requirement: Section 508 for federal agencies and their contractors, and ADA Title II for state and local government, which adopts WCAG 2.1 Level AA. The Title II deadlines moved: an Interim Final Rule published on 20 April 2026 extended compliance to 26 April 2027 for entities of 50,000 or more people and 26 April 2028 for everyone else.

Last updated 20 August 2026. Written and fact checked by the Sitepdf team.

Which HTML to PDF engines actually produce accessible output

Every cell below was read off the project own documentation on 20 August 2026. The column that matters is the third one: tagging and PDF/UA conformance are different claims, and most comparison articles collapse them into one.

Engine or service Emits tagged PDF? Targets PDF/UA? What its own documentation says Cost of the engine
Headless Chromium (Puppeteer, Playwright, Chromium based APIs including Sitepdf) Yes, via the generateTaggedPDF flag on Page.printToPDF No conformance profile The DevTools Protocol describes the parameter as "Whether or not to generate tagged (accessible) PDF. Defaults to embedder choice." It is still marked Experimental. There is no PDF/UA switch and no conformance claim anywhere in the protocol. Free, open source
Prince (and DocRaptor, which runs Prince as a service) Yes, via --tagged-pdf Yes, PDF/UA-1 (ISO 14289-1) Prince documents PDF/UA-1 as a supported output profile and states that the PDF/A-1a, 2a, 3a and PDF/UA-1 profiles "require tagged PDF, and will automatically enable it". It also lists the PDF/UA obligations it expects your source to meet, including alternative text and logical order. Commercial license, or per document through DocRaptor
PDFreactor Yes, including WAI-ARIA roles Yes States that it "supports the creation of tagged PDF documents in line with accessibility guidelines, including Section 508, the Matterhorn protocol and PDF/UA", and publishes a VPAT. WAI-ARIA attributes in the source are used to improve the structure it emits. Commercial license
WeasyPrint Yes, via --pdf-tags Yes, pdf/ua-1 and pdf/ua-2 variants The most honest sentence published by anyone in this category: "The generation of PDF/A and PDF/UA documents is supported. However, the generated documents are not guaranteed to be valid, and users have the responsibility to check that they follow the rules listed by the related specifications." Free, BSD licensed
wkhtmltopdf No No Nothing, because the project is over. The GitHub repository carries the notice "This repository was archived by the owner on Jan 2, 2023." The last release, 0.12.6, shipped in June 2020. Anything built on it, including many older PHP and Python wrappers, inherits that. Free, unmaintained
html2pdf.js and anything using html2canvas No, and it cannot No By its own description it "renders all content into an image, then places that image into a PDF. This means text is not selectable or searchable". A picture of a document has no text layer at all, so there is nothing for a screen reader to read and no tagging is possible. Free
Adobe PDF Services Accessibility Auto-Tag Yes, but it is remediation, not rendering Assists toward it A separate operation that adds tags to a PDF you already have, rather than an HTML renderer. Priced at 10 Document Transactions per page, against a free allowance of 500 transactions a month, so a single 100 page report consumes twice the monthly free tier. Quote only, no published rate card

Two things this table is not saying. It is not saying Chromium output fails an audit: for a well built HTML source, tagged Chromium output is genuinely usable with a screen reader and satisfies a large share of WCAG. It is saying that if your contract names PDF/UA-1 specifically, an engine with a conformance profile is the safer starting point, and every route still needs validation. And it is not saying the free engines are worse. WeasyPrint targets PDF/UA and costs nothing; what it lacks is a JavaScript engine, so a template that draws a chart client side renders an empty box.

What makes a PDF accessible?

An accessible PDF is one that assistive technology can interpret rather than guess at. Six things carry almost all of the weight, and five of them are decided in your HTML before any rendering happens.

  • A tag structure. Headings, paragraphs, lists, tables and figures marked as what they are, in a parallel tree alongside the visual content.
  • A logical reading order. The sequence a screen reader announces content in. Untagged multi column layouts get read straight across the columns, which is why they come out as nonsense.
  • Alternative text on meaningful images, and images that are purely decorative marked as artifacts so they are skipped rather than announced.
  • Real table headers. A th with a scope becomes a header association in the PDF, so each cell is read with its column and row header attached. This is the single difference between a usable and an unusable data table.
  • A document language, so the right pronunciation engine is selected, plus a document title.
  • Text that is actually text. Selectable, searchable vector text rather than an image of a page.

Notice what is not on that list: how the document looks. Accessibility is about the structure underneath the appearance, which is exactly why generating from HTML has a structural advantage over scanning or over drawing a layout by hand. You already have a semantic document. The job is to not lose it on the way into the PDF.

What is a tagged PDF?

An untagged PDF is a set of drawing instructions. It knows that a run of glyphs sits at certain coordinates in a certain font. It has no idea that the run is a level two heading, that another block is a table cell, or in what order a human should consume any of it. Tagging adds a structure tree describing exactly that.

When you render from HTML, the mapping is direct, and it is worth knowing because it tells you where quality comes from:

  • h1 to h6 become H1 to H6 structure elements, which is what lets a screen reader user jump between sections instead of listening linearly.
  • ul, ol and li become L, LI and LBody, so list membership and position are announced.
  • A table with th and scope becomes Table, TR, TH and TD with header associations.
  • An img with alt becomes a Figure with alternate text.
  • lang on the html element becomes the document language.
  • DOM order becomes reading order.

The consequence is blunt. The renderer does not invent structure, it translates the structure you gave it. A document built out of styled div elements with visual sizing instead of headings will be tagged, and will still be useless, because there was nothing meaningful to carry across. Teams that treat accessibility as a rendering setting rather than a markup discipline discover this at audit, not before.

Section 508 and ADA Title II: what US buyers are actually asked in 2026

Two regimes drive nearly every accessibility clause a US software vendor sees, and they are routinely confused with each other.

Section 508 binds federal agencies, and reaches contractors and recipients of federal funds through procurement. The revised standards incorporate WCAG Level A and AA for electronic content, and it has been in force for years. If you sell to a federal agency, accessibility is a line item in the solicitation and often a VPAT request.

ADA Title II is the newer pressure. The Department of Justice published its web and mobile app rule in the Federal Register on 24 April 2024, adopting WCAG 2.1 Level AA for state and local government web content, and conventional electronic documents including PDFs are explicitly in scope.

The dates moved, and most published guidance has not caught up. On 20 April 2026 the Federal Register published an Interim Final Rule extending the compliance deadlines. The current dates are 26 April 2027 for public entities with a total population of 50,000 or more, and 26 April 2028 for entities under 50,000 and for special district governments. Plenty of articles written in 2024 and 2025 still print April 2026 as the first deadline. It is worth checking the current date before you plan a remediation budget around it, in either direction.

There is also an exception worth knowing: conventional electronic documents posted before a covered entity compliance date are generally exempt, unless they are currently being used to apply for, access or participate in a service. Documents created after the date are not exempt, which is precisely why generated documents matter. A statement, invoice, permit or report that your system produces every month is being created new every time.

If you are a software vendor rather than a covered entity, the obligation still lands on you indirectly. Your customer is covered, your product generates the PDFs they send to the public, and their duty becomes your contract clause. That is why this arrives as a procurement questionnaire rather than a lawsuit, and the document it asks for by name is almost always an Accessibility Conformance Report. Our page on the VPAT and Accessibility Conformance Report covers which edition to complete, what each conformance rating commits you to, and the Level A rows that untagged output makes impossible to claim honestly.

How to generate an accessible PDF from HTML

The work is mostly upstream. In rough order of how much difference each step makes:

  1. Fix the source markup first. Real heading levels in order with no skips, real lists, real tables with th and scope, alt on every meaningful image and alt="" on decorative ones, and lang on the html element. No step further down this list can compensate for skipping this one.
  2. Set the reading order by DOM order. CSS that visually reorders content, particularly flexbox order and grid placement, does not reorder the tag tree. What looks like a sensible two column layout can be announced in an order nobody intended. Lay the document out in the order it should be read.
  3. Turn tagging on at render time. With Chromium it is one parameter. It is off by default in many wrappers, which is the most common reason a team believes they are producing tagged output and is not.
  4. Give the document a title and language in metadata, not only in the visible header.
  5. Check what came out. Not what you intended, what the file contains. Free tools do this in seconds.
  6. Do not run the file through a tool that strips the tags. This is the failure nobody expects: merge, compress, watermark, flatten and some signing steps can silently discard the structure tree. Validate after the last step in the pipeline, not after the render.

Our guide on accessible PDF from HTML walks through the tagging behaviour in more detail, and how to test PDF accessibility covers the checkers, what they catch and what they cannot.

Where automated generation stops

Every vendor in this category has an incentive to imply that switching on a flag makes a document compliant. It does not, and pretending otherwise is how a team fails an audit it thought it had passed.

Tagged is not conformant. PDF/UA-1 is a formal ISO standard with specific requirements, and emitting tags is a necessary but not sufficient step toward it. Chromium has no PDF/UA mode at all. WeasyPrint, which does have PDF/UA variants, states plainly that generated documents are not guaranteed to be valid and that checking is the responsibility of the user. That is the honest position for the whole category.

Some requirements are not machine decidable. No renderer can tell whether your alternative text is a useful description or the string "image1.png". None can judge whether a heading level reflects the actual document hierarchy, whether colour alone is carrying meaning, or whether reading order makes sense to a human. The PDF Association Matterhorn Protocol organises PDF/UA conformance into 31 checkpoints and 136 failure conditions, and while most can be identified by software, a substantial set requires human judgment. That is a structural property of accessibility, not a gap in any product.

Complex content stays hard. Multi level nested tables, data visualisations, mathematical notation and interactive forms all need deliberate work beyond good markup. A chart rendered as an image needs a real text description of what it shows, not a label.

The realistic position for a team generating documents at volume: good semantic HTML plus tagged output gets you a genuinely usable document and most of the way to WCAG, and it scales to a million files at no extra cost per file. Formal PDF/UA conformance on a document that a regulator will scrutinise still deserves validation and, sometimes, remediation in a dedicated tool. Anyone who tells you their renderer removes that step is selling you a future audit finding. If you are choosing what to validate with, our PDF accessibility checker comparison prices six tools and shows which of them actually decide PDF/UA conformance rather than just listing issues.

Tagging on, real vector text out, and a timestamped copy of exactly what was produced. If you are ever asked to prove what a document looked like when it was issued, the archive answers it without a rebuild.
curl https://api.sitepdf.com/v1/render \
  -H "Authorization: Bearer $SITEPDF_KEY" \
  -d url="https://app.example.com/statements/2026-08/1042" \
  -d format=Letter \
  -d tagged=true \
  -d archive=true

{
  "pdf_url": "https://api.sitepdf.com/v1/documents/doc_9k2rb.pdf",
  "pages": 4,
  "tagged": true,
  "rendered_in_ms": 1420,
  "archive": {
    "id": "arc_f81ld",
    "captured_at": "2026-08-20T09:12:44Z",
    "retrieve_url": "https://api.sitepdf.com/v1/archives/arc_f81ld"
  }
}

The API is in early access; this is the documented call shape it opens with. Full request and response walkthrough.

Questions about this job

What makes a PDF accessible?
A tag structure that identifies headings, lists, tables and figures, a logical reading order, alternative text on meaningful images, real header associations in data tables, a document language and title, and selectable text rather than a scanned image. When the PDF is generated from HTML, five of those six come directly from the quality of the source markup rather than from any renderer setting.
What is a tagged PDF?
A tagged PDF carries a structure tree alongside the visual content, describing what each element is and in what order it should be read. Without it, a PDF is only drawing instructions and a screen reader has to guess from position, which is why untagged multi column documents get read across the columns. Tagging is the foundation every accessibility standard builds on.
How do I know if a PDF is accessible?
Run it through a checker and then look at it yourself. PAC, the free PDF Accessibility Checker, tests many PDF/UA and WCAG requirements in seconds and includes a screen reader preview. veraPDF is an open source validator covering PDF/UA parts 1 and 2 machine checks. Both are free. Neither can judge whether your alternative text is meaningful, so a human pass is still required.
Is a tagged PDF the same as a Section 508 compliant PDF?
No. Tagging is necessary but not sufficient. A file can be fully tagged and still fail because the reading order is wrong, alternative text is missing or meaningless, tables lack header associations, or colour alone carries meaning. Section 508 conformance is judged against WCAG success criteria applied to the document, not against the presence of a tag tree.
When is the ADA Title II compliance deadline for PDFs?
The deadlines were extended by an Interim Final Rule published on 20 April 2026. Public entities with a total population of 50,000 or more must comply by 26 April 2027. Entities under 50,000 and special district governments have until 26 April 2028. The standard is WCAG 2.1 Level AA, and conventional electronic documents including PDFs are in scope.
Can headless Chromium produce an accessible PDF?
It can produce a tagged PDF. The DevTools Protocol exposes a generateTaggedPDF parameter on Page.printToPDF, described as generating tagged (accessible) PDF and still marked experimental, and Puppeteer and Playwright surface it. What Chromium does not offer is a PDF/UA conformance profile, so if a contract names ISO 14289-1 specifically, plan on validation and possibly a different engine.
Which HTML to PDF engines support PDF/UA?
Prince supports a PDF/UA-1 output profile and enables tagging automatically when it is selected. PDFreactor states support for PDF/UA, Section 508 and the Matterhorn protocol, and publishes a VPAT. WeasyPrint offers pdf/ua-1 and pdf/ua-2 variants while stating that valid output is not guaranteed. Headless Chromium, wkhtmltopdf and anything built on html2canvas do not.
Can you make a PDF accessible automatically?
Partly. Generating from semantic HTML with tagging enabled automates the structural work and scales to any volume, which is far better than remediating files one at a time. What cannot be automated is judgment: whether alternative text describes the image usefully, whether headings reflect the real hierarchy, and whether the reading order makes sense. Budget for a human pass on documents that will be scrutinised.

Early access

Get on the early-access list

The API opens to the list first, in order. Early access locks the planned launch rates for 12 months. No card required, launching soon.

Render + archive, one API