Tag PDF tables as real tables
Data tables in a PDF need real table tags, Table, TR, TH and TD, so screen readers can announce the right header with each cell. Content counts as tabular when the relationships between the values run in two directions, down and across. Tables drawn with tab stops, rules, or text boxes have no structure at all. W3C publishes PDF6 as a sufficient technique, and it comes with two details people miss. Cells that span rows or columns need a RowSpan or ColSpan attribute, and a table with blank cells often needs empty TD cells added so every row and column holds the same count. Word and InDesign export a simple header row correctly. Row headers and anything complex have to be finished in a PDF editor, and OpenOffice Writer can only mark column headings, never row ones.
How we find it in an audit
We navigate the table with a screen reader's table commands and check whether row and column headers are announced as we move between cells. In Acrobat's Tags panel we confirm the Table, TR, TH and TD structure matches the visual grid, and we look specifically at merged cells and blank cells, because those are where an export that looked fine falls apart.
How affected users experience it
An untagged table reads as one long stream of values with no headers. "January 4,210.00 3,975.50 February", on and on. In a fee schedule or account statement, the reader has to count cells and hold the whole grid in memory to know which column a figure belongs to. Most people give up and phone instead.
Passes vs. fails
Passes
The statement uses a tagged table. TH cells mark "Symbol", "Shares", "Price" and "Value", the two-column merge in the totals row carries a ColSpan, and each cell announces its column header. "Price, 214.30".
Fails
A brokerage statement lays out holdings with tab stops. A screen reader reads "AAPL 120 214.30 25,716.00" with no way to tell shares from price from market value.
How this gets tested
The W3C publishes test rules that define what a checker looks for here.
- ARIA attribute is defined in WAI-ARIAA tool can check this
- ARIA state or property has valid valueA tool can check this
- Element with role attribute has required states and propertiesA tool can check this
- Form field has non-empty accessible nameA tool can check this
- Headers attribute specified on a cell refers to cells in the same table elementA tool can check this
- Role attribute has valid valueA tool can check this
- ARIA global properties not used where prohibitedA tool can check this
- ARIA required context roleA tool can check this
- ARIA required owned elementsA tool can check this
- ARIA state or property is permittedA tool can check this
- Table header cell has assigned cellsA tool can check this
Other ways to satisfy this rule
52 guides on this site are filed under 1.3.1 Info and Relationships. W3C lists this one as sufficient for that rule when used for making information and relationships conveyed through presentation programmatically determinable, so the condition is part of the test rather than a footnote to it.
- ARIA11sufficientAdd landmarks so users can skip around
- ARIA12sufficientUse role=heading when h1-h6 is impossible
- ARIA13sufficientName repeated landmarks so they are distinguishable
- ARIA16sufficientName controls from visible text with aria-labelledby
- ARIA17sufficientGroup related form fields with ARIA roles
- ARIA20sufficientMark leftover page areas with role=region
This guide is our interpretation of W3C technique PDF6: Using table elements for table markup in PDF Documents. W3C publishes its techniques as guidance rather than as the standard, and says so on every one of them. The success criterion is what conformance is measured against, and a technique is one documented way to meet it.