Accessible PDFs
Accessible PDFs are tagged PDFs — documents with a structure tree describing the logical reading order and semantics of the content, independent of its visual layout. A screen reader uses that tree to read the document to a blind or low-vision user. Without it, the user gets either nothing or a jumbled mess.
EuroPDF generates tagged PDFs when you enable the PDF/UA profile as an API option. But the PDF is only as accessible as the HTML you send us. Prince’s own documentation is honest about this:
“Prince helps in creating accessible documents. Note, however, that Prince does not create WCAG-compliant documents by itself.” — PrinceXML docs
This page is about the HTML side: the semantic patterns that let Prince produce a tagged PDF that passes PDF/UA checkers. You write proper HTML, we handle the rest.
A complete example
<!DOCTYPE html>
<html lang="en">
<head>
<title>Quarterly Report 2026</title>
</head>
<body>
<header>
<h1>Quarterly Report 2026</h1>
</header>
<main>
<h2>Summary</h2>
<p>Revenue increased 18% year-over-year...</p>
<h2>Revenue by Region</h2>
<table>
<caption>Revenue in EUR, Q1 2026</caption>
<thead>
<tr><th scope="col">Region</th><th scope="col">Revenue</th></tr>
</thead>
<tbody>
<tr><th scope="row">Germany</th><td>€480,000</td></tr>
</tbody>
</table>
</main>
<footer>
<p>Confidential. Internal use only.</p>
</footer>
</body>
</html>Everything that matters for accessibility is in that markup: a lang attribute on <html>, a document <title>, semantic landmarks (<header>, <main>, <footer>), a proper heading hierarchy, and a table with <caption>, <th scope>, and explicit <thead>/<tbody>. No special classes, no ARIA attributes, no CSS tricks — just well-structured HTML.
What EuroPDF does for you
- Tags the PDF automatically when you output with the PDF/UA profile, mapping your HTML elements to the correct PDF structure tags.
- Preserves the reading order from the HTML DOM, which is what assistive tech follows.
- Embeds the document language in the PDF metadata for screen readers.
- Carries alt text from
<img alt="...">into the PDF image structure. - Emits a tagged structure tree that conforms to the PDF/UA (ISO 14289) and PDF/A-3a specifications.
Try it now
Test it instantly in the Playground — no sign-up required.
More examples
Language declaration
<html lang="de">
<body>
<p>Dieses Dokument ist auf Deutsch.</p>
<p lang="en">This paragraph is in English.</p>
</body>
</html>Without lang, screen readers guess the language (usually wrong) and mispronounce the text. Mark the document language once on <html>, and override it with lang="..." on any element whose content is in a different language.
Images with alt text
<figure>
<img src="chart.png" alt="Bar chart showing Q1 2026 revenue of 1.2M, up 18% YoY">
<figcaption>Figure 1: Quarterly revenue</figcaption>
</figure>alt describes what the image conveys, not what it looks like. For decorative images (spacers, dividers), use alt="" — not missing alt, which reads the filename.
Accessible tables
<table>
<caption>Team headcount by department</caption>
<thead>
<tr><th scope="col">Department</th><th scope="col">Headcount</th></tr>
</thead>
<tbody>
<tr><th scope="row">Engineering</th><td>42</td></tr>
<tr><th scope="row">Product</th><td>12</td></tr>
</tbody>
</table>The scope attributes let assistive tech announce the right row and column headers as the user navigates between cells.
Correct heading hierarchy
<h1>Document title</h1>
<h2>Chapter One</h2>
<h3>A subsection</h3>
<h2>Chapter Two</h2>One <h1> per document, no skipped levels. Use CSS to adjust visual size — never skip levels to get a smaller look.
Semantic landmarks
<header><h1>Employee Handbook</h1></header>
<nav>Contents: Introduction · Policies · Benefits</nav>
<main>
<h2>Introduction</h2>
<p>...</p>
</main>
<aside>Tip: Use only one main element per document.</aside>
<footer>© 2026 Internal document.</footer>Landmark elements let screen reader users jump directly to the content area and skip repetitive navigation.
Semantic lists
<ul>
<li>Unordered bullet list — order doesn't matter</li>
</ul>
<ol>
<li>Ordered list — sequence is meaningful</li>
<li>Steps, rankings, timelines</li>
</ol>
<dl>
<dt>Tagged PDF</dt>
<dd>A PDF with a structure tree for assistive tech.</dd>
</dl>Never fake a list with paragraphs and bullet characters — assistive tech loses the list structure entirely and reads it as flowing prose.
Form labels
<label for="email">Email address</label>
<input type="email" id="email" name="email">
<label>
Phone
<input type="tel" name="phone">
</label>Every form field needs an associated label — either via for/id or by nesting the input inside the <label>. Without this association, assistive tech has no way to announce what each field is for.
EuroPDF wraps PrinceXML — the full reference for PDF/UA output, tagged PDF, and PDF profiles lives in the Prince user guide.