PDF Structure Element

A node in a PDF's logical structure tree that represents a semantic unit of the document — a paragraph, heading, table, figure, or list item. Structure elements link the document's logical meaning to the actual rendered content on the page, enabling screen reader navigation and accessible reflow.

A PDF structure element is a node in the document's logical structure tree — the hierarchical representation of a document's semantic organisation. Structure elements represent units of meaning: a paragraph is a structure element, a heading is a structure element, a table is a structure element, and each table cell is a structure element. Together, they form a tree that mirrors the logical structure of the document — the same structure a human would use if asked to outline the document's content.

The structure tree is the foundation of <a href="https://pdftheguide.com/glossary/tagged-pdf" target="_blank" rel="noopener">tagged PDF</a> accessibility. Without it, a PDF is a flat stream of visual drawing instructions — text at coordinates, no semantic organisation. With it, the PDF has logical structure that screen readers can navigate, that reflow engines can use to adapt the document for different screen sizes, and that AI extraction pipelines can use to extract coherently ordered, logically chunked text.

Understanding PDF structure elements — their types, their attributes, and how they link to page content — is essential for anyone building accessible PDFs, implementing PDF accessibility tools, or troubleshooting PDF/UA conformance.

Standard structure element types

The PDF specification defines a set of standard structure types (the "Standard Structure Types" in ISO 32000). These fall into several categories:

**Document-level elements:** - `Document` — The root element of the structure tree - `Part` — A large subdivision, like a chapter in a book - `Art` — An article, a standalone piece of content - `Sect` — A section within a Part or Art

**Block-level elements** (generate line breaks in reflow): - `P` — Paragraph (the most common block element) - `H`, `H1`–`H6` — Headings at specific levels - `Blockquote` — Extended quotation - `Caption` — Caption for a figure or table - `Index` — An index section

**List elements:** - `L` — List container - `LI` — List item - `Lbl` — List item label (the bullet or number) - `LBody` — List item body (the content)

**Table elements:** - `Table` — Table container - `TR` — Table row - `TH` — Table header cell - `TD` — Table data cell - `THead`, `TBody`, `TFoot` — Table sections

**Inline-level elements** (appear within text flow): - `Span` — Generic inline container - `Quote` — Inline quotation - `Note` — Footnote or endnote reference - `Code` — Inline code

**Special elements:** - `Figure` — Image or graphic (must have `/Alt` attribute) - `Formula` — Mathematical formula - `Form` — Interactive form widget reference

Structure element attributes

Structure elements can carry attributes that provide additional semantic information. Key attributes:

**`/Alt` (Alternate text)** — A text description of the element's content, used when the actual content cannot be read directly. Required on `Figure` elements; also used on formulas, custom symbols, and any content that is image-based rather than text-based.

**`/ActualText`** — The actual text content that an element represents when the character codes in the content stream do not directly map to Unicode characters (e.g., ligatures, glyph-based symbols). If an "fi" ligature is stored as a single glyph, ActualText on the containing Span specifies that this glyph represents the two characters "f" and "i".

**`/Lang`** — The BCP 47 language tag for the content in this element. Used when a portion of the document is in a different language from the document's default language (set in the document catalogue). Required for correct screen reader pronunciation.

**`/E` (Expansion text)** — The expanded form of an abbreviation or acronym. A Span tagged with `/E (Portable Document Format)` surrounding the text "PDF" allows screen readers to expand the abbreviation.

**Table-specific attributes** — `/Scope` (`Row`, `Column`, or `Both`) on TH elements specifies whether a header cell applies to its row, its column, or both. `/Headers` on TD cells lists the IDs of TH cells that act as headers for that data cell — used for complex tables with multiple header levels.

**Layout attributes** — `/BBox` (bounding box), `/Placement` (Block, Inline, Before, Start, End), and `/WritingMode` can be present on structure elements for reflow-capable viewers.

Structure element hierarchy: building the tree

The structure tree is built as a hierarchy with the StructTreeRoot at the top, branching down through container elements to leaf elements that directly reference page content:

``` StructTreeRoot └── Document ├── H1 (heading "PDF Structure Elements") │ └── MCID 0 (text on page 1) ├── P (intro paragraph) │ └── MCID 1 ├── H2 (heading "Structure Types") │ └── MCID 2 ├── P │ └── MCID 3 ├── Table │ ├── TR │ │ ├── TH (headers["r1"]) → MCID 4 │ │ └── TH (headers["r2"]) → MCID 5 │ └── TR │ ├── TD → MCID 6 │ └── TD → MCID 7 └── Figure (/Alt "Diagram showing...") └── MCID 8 ```

Each leaf element references page content through a Marked Content Reference (`/Type /MCR`, `/Pg`, `/MCID`). The MCID corresponds to a `BDC ... EMC` bracket in the page content stream.

The ordering of children in the structure tree defines the logical reading order — the order in which a screen reader will encounter content. This ordering must be explicitly correct; it does not automatically match the visual page layout.

A common mistake: generating the structure tree in page-drawing order (which may be left-column then right-column for a two-column layout) rather than logical reading order (which should be all of column 1, then all of column 2). This produces a PDF that looks correct visually but reads incorrectly to a screen reader.

Structure elements in PDF/UA and WCAG

<a href="https://pdftheguide.com/glossary/pdf-ua" target="_blank" rel="noopener">PDF/UA (ISO 14289)</a> specifies requirements for structure elements that map directly to <a href="https://www.w3.org/TR/WCAG21/" target="_blank" rel="noopener">WCAG 2.x</a> success criteria:

| WCAG Criterion | PDF/UA Requirement | |---|---| | 1.1.1 Non-text Content | Figure elements must have /Alt attribute | | 1.3.1 Info and Relationships | Tables must use TH/TD with scope or /Headers | | 1.3.2 Meaningful Sequence | Structure tree order must be logical reading order | | 2.4.1 Bypass Blocks | Headings (H1–H6) must be present for navigation | | 2.4.6 Headings and Labels | Headings must describe the content that follows | | 3.1.2 Language of Parts | /Lang on structure elements for language changes |

The <a href="https://www.pdfa.org/" target="_blank" rel="noopener">PDF Association</a>'s Matterhorn Protocol maps each of these to specific machine-testable and human-testable checkpoints. Checkpoint 01 (Tagged PDF required) is about the existence of the structure tree; checkpoint 06 (Headings) verifies heading hierarchy; checkpoint 15 (XObjects) requires that content in Form XObjects is also tagged.

Tools for validating structure element conformance: - <a href="https://pac.pdf-accessibility.org/" target="_blank" rel="noopener">PAC</a> — Visual tag tree inspector plus Matterhorn checkpoint-by-checkpoint report - <a href="https://verapdf.org/" target="_blank" rel="noopener">veraPDF</a> — Command-line PDF/UA validation with detailed rule-by-rule output - Adobe Acrobat Pro — Tags panel + Accessibility Check

Frequently asked questions

What is a PDF structure element?

A structure element is a node in a PDF's logical structure tree that represents a semantic unit of document content — a paragraph, heading, table, list item, or figure. Structure elements are identified by type tags (P, H1, Table, Figure, etc.) and linked to the actual rendered content on the page through Marked Content References (MCID pointers). The structure tree is what makes a PDF a tagged PDF accessible to screen readers and other assistive technology.

Do all PDFs have structure elements?

No — only tagged PDFs have a structure tree with structure elements. Most PDFs in the wild are untagged — they are flat streams of drawing instructions with no logical structure. An untagged PDF cannot be used by a screen reader, cannot reflow for different screen sizes, and cannot be extracted with logical reading order. A PDF gains structure elements by being exported from an authoring tool with accessibility export settings, or by having structure added post-export using a tool like Acrobat Pro.

What happens if I use the wrong structure element type?

Using the wrong type (e.g., tagging a heading as a `P` paragraph instead of `H2`) means the structure tree has incorrect semantic information. A screen reader will not announce the paragraph as a heading, users cannot navigate to it using heading shortcuts, and automated tools will fail heading-related PDF/UA checkpoints. For tables, incorrect element types (using Span instead of TD, or omitting TH elements) break the association between header cells and data cells, making the table unnavigable for screen reader users.

How do I verify that my PDF has correct structure elements?

In Adobe Acrobat Pro, open the Tags panel (View > Show/Hide > Navigation Panes > Tags) to browse the full structure tree and inspect element types. Use Accessibility Check (Tools > Accessibility > Accessibility Check) for a summary report. For authoritative validation, use the free PAC accessibility checker which runs Matterhorn Protocol checks and shows a screen reader simulation. veraPDF provides command-line batch validation with detailed rule output.