Concept · Accessibility

What is PDF/UA,
and what makes a PDF accessible?

PDF/UA is the standard for accessible PDF. Behind the visible page, an accessible file carries a logical structure: headings, lists, tables, figures with descriptions and a defined reading order. That hidden skeleton is what lets a screen reader present the document to someone who cannot see it.

The simplest analogy: a building with ramps and signage

Two buildings can look identical from the street. One has only a flight of stairs, no signs in braille, no elevator. The other has a ramp, a lift, clear signage and a logical layout. Both hold the same offices, but only one can be used by everyone.

A PDF is the same. An ordinary PDF is a flat picture of a page: a sighted reader manages, but a screen reader sees stairs with no signs. An accessible PDF adds the ramps and signage, a structure that says "this is the main heading, this is a list of three items, this image shows a revenue chart." The page looks the same; the difference is who can actually use it.

What a screen reader perceives

The visible page is identical in both cases. What changes is the structure underneath, and that is exactly what assistive technology reads.

Untagged PDF

A flat arrangement of marks, no structure.

The screen reader announces:
"Annual report overview revenue grew eighteen…"
No headings to jump between.
Reading order uncertain.
Image: no description available.

Tagged PDF/UA

A logical structure the reader can navigate.

The screen reader announces:
Heading 1: Annual report
Paragraph: Overview of the year…
List, 3 items: Revenue, Costs, Profit
Figure: Revenue grew 18% year over year

The structure a tagged PDF carries

Tags add meaning to content without changing the look of the page. These are the building blocks of an accessible document.

Headings H1–H6Navigable document outline
ListsL, LI and LBody items
TablesHeader cells, scope and IDs
Figures + alt textDescribed images
Reading orderThe sequence content is read in
LanguageSo text is pronounced correctly

Why accessible PDF matters

It is both a legal duty and the right thing to do, and it improves the document for everyone.

Legal compliance

Section 508, the ADA, EU EN 301 549 and similar laws require accessible documents from public bodies and many firms.

Inclusion

Readers who use screen readers, magnifiers or reflow can navigate the document instead of being locked out.

Better search & reuse

Structure and Unicode mapping make the text reliably searchable, extractable and easier to reflow on small screens.

How to create an accessible PDF with rust-pdf

Call tagged(), set heading levels on titles, and give figures alternative text. rust-pdf builds the full structure tree and a reading order, and pairs with PDF/A for archival plus accessible output.

# pip install rustpdf
import rustpdf

with rustpdf.Document() as doc:
    doc.pdfa(rustpdf.PdfaLevel.A2A).tagged().set_info(title="Accessible report")
    f = doc.add_font_file("Roboto-Regular.ttf")
    doc.add_page()
    doc.show_text(f, 26, 72, 760, "Annual report", heading_level=1)  # H1
    doc.show_text(f, 11, 72, 720, "Overview of the year…")            # paragraph
    chart = doc.add_image_file("chart.png")
    doc.figure(chart, 72, 520, 300, 150, alt="Revenue grew 18% year over year")
    doc.save("accessible.pdf")        # validates as PDF/UA-1 + PDF/A-2a
// dotnet add package RustPdf
using RustPdf;

using var doc = new Document();
doc.Pdfa(PdfaLevel.A2a).Tagged().SetInfo(title: "Accessible report");
int f = doc.AddFontFile("Roboto-Regular.ttf");
doc.AddPage();
doc.ShowText(f, 26, 72, 760, "Annual report", headingLevel: 1);
int chart = doc.AddImageFile("chart.png");
doc.Figure(chart, 72, 520, 300, 150, alt: "Revenue grew 18% year over year");
byte[] bytes = doc.ToBytes();
// go get github.com/rustpdf/rustpdf-go@latest
doc, _ := rustpdf.New()
defer doc.Close()
doc.PdfaLevel(rustpdf.A2a)
doc.Tagged()
f, _ := doc.AddFontFile("Roboto-Regular.ttf")
doc.AddPage()
doc.ShowText(f, 26, 72, 760, "Annual report", 1) // heading level 1 = H1
chart, _ := doc.AddImageFile("chart.png")
doc.Figure(chart, 72, 520, 300, 150, "Revenue grew 18% year over year")
data, _ := doc.ToBytes()
// npm install rustpdf
const { Document, PdfaLevel } = require("rustpdf");

const doc = new Document();
doc.pdfa(PdfaLevel.A2a).tagged().setInfo({ title: "Accessible report" });
const f = doc.addFontFile("Roboto-Regular.ttf");
doc.addPage();
doc.showText(f, 26, 72, 760, "Annual report", 1); // H1
const chart = doc.addImageFile("chart.png");
doc.figure(chart, 72, 520, 300, 150, "Revenue grew 18% year over year");
const bytes = doc.toBytes();
Accessibility validated by: veraPDF (PDF/UA-1)veraPDF (PDF/A-2a)

Lists, tables with header scope, captions and inline spans are covered in the documentation.

PDF/UA FAQ

What is PDF/UA?

PDF/UA stands for PDF/Universal Accessibility and is the ISO 14289 standard for accessible PDF. It is essentially WCAG applied to PDF. A PDF/UA file is a tagged PDF: behind the visible page it carries a logical structure of headings, paragraphs, lists, tables, figures with alternative text, a defined reading order and a language. That structure is what lets assistive technology, such as screen readers, present the document correctly.

What is a tagged PDF?

A tagged PDF contains a hidden structure tree that labels each piece of content: this is a level 1 heading, this is a paragraph, this is a list item, this is a table header cell, this is a figure and here is its alternative text. An untagged PDF is only a visual arrangement of marks on a page, so a screen reader cannot tell a heading from body text or know the correct reading order. Tags add that meaning without changing how the page looks.

Why is PDF/UA important?

Accessibility is a legal requirement in many places: Section 508 and the ADA in the United States, EN 301 549 in the European Union, and equivalent laws elsewhere oblige public bodies and many companies to publish accessible documents. Beyond compliance, an accessible PDF includes people who use screen readers, reflows better on small screens, and is easier to search and extract reliably.

What is the difference between PDF/UA and PDF/A?

They solve different problems and combine well. PDF/A is about long-term archiving, making a file self-contained so it stays readable for decades. PDF/UA is about accessibility, adding the tagged structure that assistive technology needs. The accessible PDF/A levels, PDF/A-2a and PDF/A-3a, satisfy both at once: archival and accessible in a single file. See what PDF/A is for the archiving side.

How do I create an accessible PDF with rust-pdf?

Call tagged() on the document, set heading levels on titles, and give figures alternative text. rust-pdf builds a nested structure tree with headings H1 to H6, lists, tables with header cells and scope, figures with alt text, a document language and a defined reading order. Combine it with pdfa(PdfaLevel.A2A) for archival plus accessible output. It is validated as PDF/UA-1 and PDF/A-2a with veraPDF.

Generate accessible PDF in your language

One core, the same tagged output across nine languages. Accessibility is part of the Enterprise license.