PDF-Coding · Validierung

PDF/UA-Konformität programmatisch prüfen mit veraPDF

Bei jedem Build-Lauf prüfen, ob ein PDF noch konform ist: das ist der Wunsch fast aller Entwicklungsteams, die regelmäßig PDFs ausspielen. veraPDF ist der frei zugängliche Open-Source-Validator dafür, getragen von der PDF Association gemeinsam mit Foundationen. Diese Seite zeigt CLI-Aufruf, REST-API, Befund-Codes und CI-Einbau.

  • 10 Minuten Lesezeit
  • Stand: Mai 2026

Was veraPDF prüft, und was nicht

veraPDF ist ein Open-Source-Validator, der prüft, ob ein PDF die machine-verifizierbaren Anforderungen der ISO-Normen PDF/A (14289 für PDF/UA ist die Schwester-Norm) und PDF/UA erfüllt. Das Projekt wurde 2014 als Konsortium aus PDF Association, Open Preservation Foundation, Digital Preservation Coalition und anderen ins Leben gerufen. Die Validierungsregeln werden in maschinenlesbarer Form aus den ISO-Klauseln abgeleitet und sind im Validation-Profile-Repository öffentlich einsehbar.

Machine-verifizierbar ist hier der zentrale Begriff. Ein Validator kann prüfen, ob ein Tag-Baum existiert, ob jedes Bild ein /Alt -Attribut trägt, ob alle benannten Strukturtypen in einer Role-Map abgebildet sind. Er kann nicht prüfen, ob ein Alt-Text inhaltlich passt, ob die Lese-Reihenfolge sinnvoll ist oder ob eine Tabelle wirklich eine Tabelle sein sollte. Beide Klassen, die maschinelle und die menschliche, sind in der ISO-Norm gleichberechtigt; veraPDF deckt die maschinelle Klasse vollständig ab.

Profile: PDF/UA-1, PDF/UA-2 und PDF/A

veraPDF arbeitet mit Validation Profiles. Jedes Profil entspricht einer ISO-Norm-Variante. Die wichtigsten für Barrierefreiheits-Validierung sind:

veraPDF-Profile mit Anwendungsbereich
Profil-Flag Norm Wann verwenden?
--flavour ua1 ISO 14289-1 (PDF/UA-1, basiert auf PDF 1.7) Default für klassische Office- und Print-PDFs.
--flavour ua2 ISO 14289-2 (PDF/UA-2, basiert auf PDF 2.0) Für PDF 2.0-Ausgaben, neuere Pipelines (Typst, LaTeX-Tagging).
--flavour 1a / 2a / 3a PDF/A-Level a (Accessible) Archivierung mit Barrierefreiheits-Anforderung kombinieren.
--flavour auto Automatische Erkennung über XMP-Metadaten Wenn der Validator das passende Profil selbst wählen soll.

Wer den Standard nicht kennt, fängt mit --flavour ua1 an. Erst bei expliziten PDF/UA-2-Ausgaben (etwa aus Typst oder aktuellen LaTeX-Tagging-Builds) wechselt man zum 2-Profil, und nur dann sind die strengeren ISO-14289-2-Klauseln aktiv.

CLI: Validierung in einer Zeile

Die Kommandozeilen-Verwendung ist der häufigste Einstieg. Nach der Installation (siehe veraPDF-Dokumentation; verfügbar als ZIP, Docker-Image und für Linux als .deb ) reicht ein Aufruf:

verapdf-shell.txt: typische Aufrufe

 # 1. Einfache PDF/UA-1-Validierung 
verapdf --flavour 
ua1 dokument.pdf # 2. Ausführlicher Bericht als XML, gut für Tools 
verapdf --flavour 
ua1 --format 
mrr dokument.pdf > bericht.xml # 3. Stapelverarbeitung: ganze Ordner prüfen 
verapdf --flavour 
ua1 --recurse./alle-pdfs/ > bericht.xml # 4. Mit JSON-Bericht (seit veraPDF 1.22) 
verapdf --flavour 
ua2 --format 
json dokument.pdf > bericht.json # 5. Exit-Code prüfen: 0 = konform, >0 = Befunde 
verapdf --flavour 
ua1 dokument.pdf echo 
 "Exit-Code: $?" 

Wichtig ist Punkt 5: veraPDF setzt einen Exit-Code, der für Build-Skripte und Pipelines die Schalt-Logik liefert. Ein konformes Dokument liefert Exit-Code 0, jede Nicht-Konformität hebt den Code an. Damit klinkt sich die Validierung in jeden gewohnten CI-Mechanismus ein, ohne zusätzliche Parser-Logik.

Validierung in CI-Pipelines integrieren

In der Praxis sieht eine PDF/UA-Validierung in einer CI-Pipeline so aus: Nach dem Build wird das erzeugte PDF gegen veraPDF gefahren. Wenn Befunde auftauchen, bricht der Build ab, und das Team reagiert, bevor das PDF live geht. Das folgende Beispiel zeigt eine GitLab-CI-Konfiguration; für GitHub Actions oder Jenkins ist das Muster identisch.

.gitlab-ci.yml: PDF/UA-Stage

pdf_ua_check:
  stage: validate
  image: verapdf/verapdf:latest
  script: # 1. Alle gebauten PDFs prüfen 
- verapdf --flavour 
ua1 --recurse 
build/pdf/ --format 
json > report.json # 2. Bericht als Artefakt sichern 
artifacts:
    paths:
      - report.json
    expire_in: 4 weeks
    when: always
  rules:
    - if 
: $CI_COMMIT_BRANCH == "main" 
veraPDF in einer CI-Pipeline Ablaufdiagramm mit fünf horizontal angeordneten Stationen. Commit-Push führt zur Build-Stage, die das PDF erzeugt. Es folgt die veraPDF-Validate-Stage, die einen Bericht erzeugt. Bei Exit-Code 0 geht die Pipeline auf grün (Deploy), bei Exit-Code größer 0 auf rot (Abbruch mit Bericht). CI-PIPELINE MIT VERAPDF Commit Push Build PDF erzeugt veraPDF --flavour ua1 Exit 0 Exit > 0 Deploy ✓ Abbruch + report.json Artefakt
veraPDF als Schaltstation im Build: Exit-Code 0 = grün, alles andere bricht ab. Der JSON-Bericht bleibt als Artefakt erhalten.

REST-API für Server-Workflows

Wer veraPDF nicht in jedem Container-Lauf neu starten möchte, betreibt einen Server-Modus. veraPDF bietet dafür eine REST-API über das Projekt veraPDF-rest. Ein PDF wird per POST in den Endpoint /validate gegeben, die Antwort ist eine JSON-Struktur mit den Befunden.

verapdf-rest.sh: Aufruf der REST-API

 # Server starten 
java -jar verapdf-rest.jar server config.yml # PDF an REST-Endpoint senden 
curl -X 
POST -H 
 "Content-Type: application/octet-stream" 
\ --data-binary 
@dokument.pdf \ -H 
 "Accept: application/json" 
\
     http://localhost:8080/api/validate/ua1

Befund-Codes lesen und priorisieren

veraPDF meldet Befunde mit einem Rule-ID und einer ISO-Klausel-Referenz. Beispiel: specification: ISO 14289-1, clause: 7.21.3.2, testNumber: 1 . Wer wissen will, was ein Befund bedeutet, kann die Klausel im Standard nachlesen. Praktischer ist der gebündelte Blick:

  • Hohe Priorität sind strukturelle Pflichtverletzungen: kein /StructTreeRoot , fehlendes /Lang auf Dokument-Ebene, fehlendes /MarkInfo . Ohne diese gibt es kein PDF/UA.
  • Mittlere Priorität sind Tag-Fehler: nicht gemappte Custom-Tags, fehlende /Alt -Attribute auf /Figure -Knoten, falsche Hierarchie der /H<n> -Tags.
  • Niedrige Priorität sind Detail-Befunde wie nicht korrekt markierte Artifacts oder Tabula-Spacing-Probleme. Sie müssen für volle Konformität korrigiert werden, blockieren aber selten den ersten Sprint.
Mythen-Prüfung

Drei Annahmen, und warum sie nicht stimmen

Mythos 1: „Wenn veraPDF grün ist, ist das PDF barrierefrei." Nur in der maschinell prüfbaren Hälfte. Die ISO-Norm fordert ausdrücklich beides: machine-verifizierbare und human-verifizierbare Aspekte. Lese-Reihenfolge, inhaltliche Qualität der Alt-Texte, sinnvolle Heading-Hierarchie: das bleibt menschliche Aufgabe. veraPDF ist eine notwendige, aber keine hinreichende Prüfung.

Mythos 2: „veraPDF und Adobe Accessibility Checker liefern dasselbe Ergebnis." Häufig ja, aber nicht immer. Beide implementieren unterschiedliche Regel-Auslegungen einzelner ISO-Klauseln; bei Grenzfällen weichen die Berichte ab. Die ISO-Norm ist die Quelle der Wahrheit, nicht ein einzelnes Tool. Wer in heiklen Audits arbeitet, prüft mit beiden und vergleicht die Befunde.

Mythos 3: „PDF/UA-2 ist nur PDF/UA-1 plus PDF 2.0." Falsch. PDF/UA-2 ändert auch inhaltlich Vorgaben: strengere Anforderungen an Lese-Reihenfolge, klarere Pflicht zur Tabellen-Zellen-Zuordnung, neue Regeln zu Math-ML-Strukturen. Wer von PDF/UA-1 auf -2 wechselt, sollte das Profil bewusst umstellen und mit einem Audit der vorhandenen Dokumente starten.