Hier ist ein echtes Beispiel: ein Datenschutzhinweis, der von einem ungarischen Gemeinderat veröffentlicht wurde, fünf Seiten, exportiert aus Word 2019 – eines von 111 digital erstellten PDF-Dokumenten des öffentlichen Sektors in der Stichprobe hinter unserem früheren Artikel darüber, wo Word-exportierte PDFs tatsächlich scheitern. Wir haben es ausgewählt, weil es auf kleinem Raum fast alles enthält, was ein getaggtes PDF enthalten kann: einen Titel, Überschriften, eine Tabelle, eine Liste, eine Abbildung, ein paar Links.
Was tatsächlich darin steckt
Jedes getaggte PDF hat einen Strukturbaum – eine Hierarchie, die neben den Seiten gespeichert ist und die ein Screenreader, Acrobat oder eine einfache PDF-Bibliothek unabhängig von dem, was auf der Seite gezeichnet ist, durchlaufen kann. Unserer beginnt so:
uv run python scripts/dump_struct_tree.py privacy-notice.pdf
Document
Title MCIDs=[0, 1]
Figure MCID=30
Title MCIDs=[2, 3]
P MCID=4
P MCID=5
P MCID=6
Table
THead …
TBody … (7 rows total — the contact-details table below)
H3 MCID=24
P MCID=25
P MCID=26
P MCID=27
P MCID=28
H3 MCID=29
P MCID=0
L [ListNumbering=/Disc]
LI
Lbl MCID=1
LBody MCIDs=[5, 6]
LI
Lbl MCID=7
LBody MCID=10
H3 MCID=11
Document ist die Wurzel. Das zweite Title-Element enthält die eigentliche Überschrift des Hinweises, „Weboldal Adatkezelési Tájékoztató“ („Website-Datenschutzhinweis“) – Word taggt eine Überschrift auf diese Weise und ordnet sie hinter den Kulissen einer Überschrift der obersten Ebene zu, sodass ein Screenreader sie so ankündigt, wie er jede andere H1 ankündigen würde. Das erste Title, MCIDs 0 und 1, stellt sich als leer heraus: zwei markierte Bereiche ohne jegliche Zeichen, die über dem Abzeichen liegen, das als nächstes kommt. Getaggt, formatiert, leer. Figure markiert dieses Abzeichen – einen kleinen blauen Kreis mit dem Sternenkranz der EU und dem Wort „GDPR“ darin, die Art von ClipArt, mit der jeder zweite Datenschutzhinweis beginnt: ein Bild mit einem Begrenzungsrahmen auf der Seite und, darauf kommen wir zurück, sonst nichts. Table teilt sich in Kopf- und Datenzeilen auf, die gleiche Form wie eine HTML-Tabelle und aus demselben Grund – es ermöglicht einem Screenreader, „Kopfzeile: Postanschrift“ zu sagen, bevor der Wert daneben gelesen wird, anstatt eines nackten Rasters. H3 markiert die Abschnittsüberschriften weiter unten auf der Seite, dieselben Tags, die es einem Screenreader-Benutzer ermöglichen, direkt zwischen Überschriften zu springen, anstatt alles dazwischen zu lesen, so wie ein sehender Leser eine Seite nach der richtigen Unterüberschrift durchsucht. L ist die Liste: jedes LI teilt sich in ein Lbl (das Aufzählungszeichen selbst) und ein LBody (was das Aufzählungszeichen einführt) auf – zwei separate Tags für das, was auf der Seite wie eine Textzeile aussieht.
Die auf die Seite geschriebenen Zahlen
Nichts davon ist Dekoration. Jede MCID – Marked Content ID – ist eine Zahl, die direkt in die eigenen Zeichenanweisungen der Seite geschrieben wurde, derselbe Strom von „zeichne diese Glyphe hier“-Befehlen, der die sichtbare Seite erzeugt. Ein Tag enthält keinen Text; es zeigt auf einen nummerierten Bereich der Seite und gibt an, was dieser Bereich ist. Ziehen Sie den Text, der an eine Reihe von MCIDs gebunden ist, und Sie erhalten genau das, was ein Screenreader für dieses Tag vorlesen würde, was scripts/debug_dump_struct.py für jede Tabellenzelle tut:
uv run python scripts/debug_dump_struct.py privacy-notice.pdf
TABLE #1
Row 0: n_cells=2
Cell 0: role=/TH text=A weboldal üzemeltetője, … (a továbbiakban: Adatkezelő):
Cell 1: role=/TH text=[the council's name]
Row 1: n_cells=1
Cell 0: role=/TH text=Elérhetőségeink:
Row 2: n_cells=2
Cell 0: role=/TH text=Postai címünk:
Cell 1: role=/TD text=[postal address]
(Zeile 0 nennt den Verantwortlichen – den Rat, der die Datei veröffentlicht. Wir haben den Namen und die Adresse des Rates hier ersetzt: Dieser Artikel handelt vom Strukturbaum, nicht davon, welches Dorf es falsch gemacht hat, und bei 39 sauberen Websites von 1.215 in unserem weiteren Crawl ist dies ein systemisches Muster und kein Versagen eines einzelnen Büros. Zeile 1, „Elérhetőségeink“ – „unsere Kontaktdaten“ – ist eine Unterüberschrift, die als Zeile mit einer einzelnen Zelle in die Tabelle eingeschweißt ist, während jede andere Zeile zwei hat.)
Diese Zeile mit einer einzelnen Zelle ist der Punkt, an dem der Baum nicht mehr dem Standard entspricht, was der ganze Sinn dieses Artikels ist.
Tags sagen, was etwas ist, nicht ob es richtig ist
Ein Strukturbaum sagt einem Screenreader, welche Art von Sache er betrachtet. Er sagt nichts darüber aus, ob diese Klassifizierung vollständig oder korrekt geformt ist – und dieselbe Datei, die den obigen Baum erzeugt hat, scheitert bei der Prüfung mit veraPDF 1.30.2 (Build 2026-06-03) an acht separaten Regeln von PDF/UA-1:
~/.local/share/verapdf/verapdf -f ua1 --format json privacy-notice.pdf
| Klausel | Was es bedeutet | Was veraPDF hier gefunden hat |
|---|---|---|
| 7.2-43 | Tabellenzeilen müssen die gleiche Spaltenanzahl haben | „Table rows 1 and 2 span different number of columns (2 and 1 respectively)“ – die genau oben zitierte Zeile |
| 7.4.2-1 | eine Überschriftensequenz darf keine Ebene überspringen | die erste Überschrift des Dokuments ist als H3 getaggt; H1 und H2 tauchen nirgendwo in der Datei auf |
| 7.3-1 | Abbildungen benötigen Alternativtext oder einen Ersatz | „Figure structure element neither has an alternate description nor a replacement text“ – das GDPR-Abzeichen oben auf Seite eins |
Diese Lücke zwischen „getaggt“ und „korrekt“ ist genau das, wogegen WCAGs eigene Technik zum Hinzufügen von Alternativtext in einem getaggten PDF geschrieben ist: Wenn ein Bild ein Wort trägt, das wichtig ist – in diesem Fall „GDPR“, das direkt dort in den Pixeln des Abzeichens sitzt –, gehört dieses Wort in den /Alt-Eintrag, nicht nur auf die Seite. Ohne ihn hat ein Screenreader, der diese Abbildung erreicht, keinen Dateinamen, auf den er zurückgreifen kann, und keine Bildunterschrift zum Vorlesen; nur ein Bild-Tag, hinter dem nichts steht.
Acht Regeln, 36 einzelne fehlgeschlagene Prüfungen insgesamt, gegenüber 17.049 Prüfungen, die dieselbe Datei besteht. Sie hat einen Titel, ein Marked-Content-Flag, eine deklarierte Sprache, eine Tabelle, eine Liste, eine Überschriftenstruktur – wirklich getaggt, nach jeder Definition, die eine Checkliste akzeptieren würde – und es ist immer noch keine konforme Datei. „Hat Tags“ und „entspricht PDF/UA-1“ sind zwei verschiedene Behauptungen, und nur eine davon ist das, was der Standard tatsächlich verlangt. Was jede Klausel im Allgemeinen bedeutet und welche sich automatisch reparieren lassen, steht in unserer PDF/UA-Fehlerreferenz; was der Standard von Anfang bis Ende verlangt und wie er sich auf WCAG bezieht, steht im PDF/UA-Leitfaden.
Die Alternative ist schlimmer
Stellen Sie diese Datei neben eine ohne jeglichen Baum. Ein Leistungsantragsformular aus derselben Stichprobe – „KÉRELEM az ápolási díj megállapítására,“ ein Antrag auf Pflegegeld – wurde über den eigenen „Drucken als PDF“-Treiber von Windows erstellt, anstatt über den PDF-Export von Word. Führen Sie denselben Befehl dagegen aus:
uv run python scripts/dump_struct_tree.py apolasi-dij-kerelem.pdf
### apolasi-dij-kerelem.pdf: no StructTreeRoot ###
Es gibt keinen Baum, den man durchlaufen könnte. Jedes Zeichen auf der Seite trägt mcid: None – pdfplumber kann den Text immer noch herausziehen, weil die Glyphen echter Text und kein gescanntes Bild sind, aber nichts markiert, welche Zeichen die nummerierte Überschrift „1.1.1. Neve:“ („1.1.1. Name:“) bilden im Vergleich zu der leeren Zeile, die für eine Antwort gedacht ist. Visuell macht die Nummerierung die Struktur offensichtlich. Für einen Screenreader ist jede dieser Zeilen die gleiche Art von Nichts.
Was ein Strukturbaum Ihnen nicht sagen kann
Schauen Sie sich noch einmal Zeile 0 dieser Kontakttabelle an. Beide Zellen sind als /TH getaggt – eine Kopfzeilenzelle –, obwohl die zweite den tatsächlichen Namen des Rates enthält, kein Etikett. Nichts im Standard verlangt, dass eine /TH wirklich etwas einführt; die Zeilen-/Spaltenprüfung, die Zeile 1 markiert hat, löst bei einer nicht übereinstimmenden Anzahl aus, nicht bei der Frage, ob eine Kopfzeilenzelle wirklich eine Kopfzeile ist. Ob sie das ist, bleibt eine Ermessensentscheidung, die kein Validierungsprogramm trifft.
Das ist die Falle, wenn man sich allein auf eine Baumansicht verlässt. Ein Tags-Panel – von Acrobat oder PAC – rendert genau den Baum, den wir hier gelesen haben: korrekt verschachtelt, ordnungsgemäß beschriftet, leicht mit „fertig“ zu verwechseln. Es führt nicht die Zeilenzählungsprüfung, die Überschriftensequenzprüfung oder die Alternativtext-Prüfung gegen das aus, was es Ihnen zeigt; das sind separate Validierungsdurchläufe für dieselbe Datei gegen denselben Baum. Ein Baum, der vollständig aussieht, und eine Datei, die konform ist, sind zwei verschiedene Behauptungen, und eine Baumansicht beantwortet immer nur die erste.
Den Baum in Ihrer eigenen Datei sehen
So öffnen Sie einen Strukturbaum ohne Terminal
Adobe Acrobat Pro (Windows, macOS)
Das Tag-Navigationsfenster (im englischen Menü View → Show/Hide → Navigation Panes → Tags) öffnet dieselbe Art von Baum, die oben gezeigt wurde. Klicken Sie auf ein beliebiges Tag und Acrobat hebt den passenden Bereich auf der Seite hervor – der schnellste Weg, um zu sehen, ob eine Überschrift, eine Tabelle oder eine Abbildung tatsächlich auf das zeigt, von dem Sie glauben, dass es darauf zeigt.
PAC (PDF Accessibility Checker, kostenlos, Windows)
Die Strukturansicht von PAC (im englischen Original „Logical Structure“) zeigt den Baum neben jedem PDF/UA-1-Fehler, den es findet, was dem, was dieser Artikel getan hat, näher kommt als die Baumansicht von Acrobat allein.
Keine Installation
Unser eigener PDF-Barrierefreiheits-Checker meldet dieselben Fehler auf Klauselebene wie veraPDF, von einem Browser aus, und die Prüfung ist kostenlos.
Wenn ein Dokument von einem Validierungsprogramm mit einer Liste von Klauselnummern zurückgekommen ist, ist das die zweite Hälfte dieses Artikels, nicht die erste – die oben verlinkte Fehlerreferenz erklärt, was jede einzelne bedeutet. Wenn ein Dokument noch nie überprüft wurde, lohnt es sich, dies zu tun, bevor man davon ausgeht, dass die Tags, falls vorhanden, ausreichen.