Ein getaggtes PDF aus HTML für Barrierefreiheit erstellen
Auf einen Blick
Abschnitt betitelt „Auf einen Blick“Dieses Recipe erstellt aus semantischem HTML ein getaggtes PDF. NextPDF gibt einen logischen Strukturbaum, die Catalog-Sprache und die PDF/UA-2-Marker aus. Über die Konformität entscheidet ein Checker. Das Recipe folgt examples/31-pdfua2-tagged.php.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- Core ist installiert:
composer require nextpdf/core:^3. - Für den Prüfschritt ist ein PDF/UA-Validator vorhanden. Das Beispiel verwendet veraPDF.
- Erstellen Sie das Dokument.
- Rufen Sie
enableTaggedPdf()mit einem BCP-47-Sprach-Tag vorwriteHtml()auf. Die HTML-Pipeline erkennt beim Aufbau des Parsers den getaggten Modus und bindet den Emitter für getaggten Content ein. - Setzen Sie die Dokument-Metadaten (Titel, Sprache).
setLanguage()ist idempotent zuenableTaggedPdf(). - Schreiben Sie semantisches HTML. Der Parser bildet jedes Block-Element auf ein Strukturelement ab:
h1aufH1,paufP,ul/liaufL/LI,tableaufTable/TR/TD. - Speichern Sie und validieren Sie anschließend mit einem PDF/UA-Checker.
Vollständiges Beispiel
Abschnitt betitelt „Vollständiges Beispiel“<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();
// Step 2 — enable tagged mode BEFORE writeHtml(). The lang argument// drives the catalog /Lang entry and the structure tree root language.$doc->enableTaggedPdf(lang: 'en');
// Step 3 — metadata. setLanguage() restates intent; it is idempotent here.$doc->setTitle('Accessible Report');$doc->setLanguage('en');
$doc->addPage();
// Step 4 — semantic HTML. Each block element becomes a StructElem; text// runs are wrapped in BDC/EMC operators with stable MCIDs.$html = <<<'HTML'<h1>Quarterly Accessibility Report</h1><p>This document opts into tagged PDF so assistive technology can exposea meaningful reading order.</p><h2>Findings</h2><ul> <li>Headings carry semantic roles.</li> <li>Lists keep their item structure.</li></ul>HTML;
$doc->writeHtml($html);
$doc->save(__DIR__ . '/accessible.pdf');
echo "Wrote accessible.pdf — validate with: verapdf --flavour ua2 accessible.pdf\n";Erwartete Ausgabe
Abschnitt betitelt „Erwartete Ausgabe“Wrote accessible.pdf — validate with: verapdf --flavour ua2 accessible.pdfDie Ausgabe enthält einen Strukturbaum, /MarkInfo << /Marked true >>, den Catalog-Eintrag /Lang und den pdfuaid:part-XMP-Marker. Führen Sie den Checker aus, um zu bestätigen, dass diese vorhanden und in sich konsistent sind.
Randfälle
Abschnitt betitelt „Randfälle“- Aufrufreihenfolge.
enableTaggedPdf()nachwriteHtml()taggt bereits geschriebenen Content nicht nachträglich. Aktivieren Sie zuerst den getaggten Modus. - Sprach-Tag. Übergeben Sie
ConformancePolicy::strictUa2()als zweites Argument, um ein fehlerhaftes BCP-47-Tag bereits an der API-Grenze abzulehnen, statt es zur Schreibzeit stillschweigend zu verwerfen. - Idempotentes erneutes Aktivieren. Ein zweiter Aufruf von
enableTaggedPdf()aktualisiert die Sprache, ohne den bereits befüllten Strukturbaum neu aufzubauen. - Manuelles Taggen. Umschließen Sie bei Nicht-HTML-Content die Elemente mit
beginTag()/endTag(). Container-Typen (Table,TR,L,LI) werden zu Gruppierungselementen ohne markierten Content; Leaf-Typen (P,H1–H6,TD) erhalten MCIDs. - Unterstützung ist keine Konformität. NextPDF gibt die strukturellen Metadaten aus, die PDF/UA-2 benötigt. Zusätzlich gibt es eine Warnung zu eingeschränkter Parität aus: Für die Produktionsfreigabe liegt die externe Oracle-Validierung in der Verantwortung des Aufrufers. Führen Sie einen Checker aus, bevor Sie erklären, dass eine Datei konform ist.
Konformität
Abschnitt betitelt „Konformität“| Aussage | Spezifikation | Abschnitt | reference_id |
|---|---|---|---|
| Echter Content erfordert eine logische Struktur. | ISO 14289-2 | §8.2.2 | |
| Strukturelemente folgen einer definierten Verschachtelung und Lesereihenfolge. | ISO 14289-2 | §8.2.3 |
Dieses Recipe zeigt, wie Sie die getaggte Struktur erzeugen, die barrierefreies Erstellen unterstützt. Es sichert keine PDF/UA-2-Konformität zu; darüber entscheidet ein Checker.