Een getagde PDF voor toegankelijkheid maken vanuit HTML
In het kort
Sectie met titel “In het kort”Gebruik dit recept om vanuit semantische HTML een getagde PDF te maken. NextPDF schrijft de logische structuurboom, de catalogustaal en de PDF/UA-2-markeringen weg. Een checker bepaalt de conformiteit. Dit recept volgt examples/31-pdfua2-tagged.php.
Vereisten
Sectie met titel “Vereisten”- Installeer Core:
composer require nextpdf/core:^3. - Gebruik voor verificatie een PDF/UA-validator. Het voorbeeld gebruikt veraPDF.
- Maak het document aan.
- Roep
enableTaggedPdf()aan met een taaltag volgens Best Current Practice (BCP) 47 vóórwriteHtml(). De HTML-pijplijn detecteert de getagde modus wanneer de parser wordt opgebouwd en koppelt daarna de emitter voor getagde inhoud. - Stel de documentmetadata in (titel, taal). Je kunt
setLanguage()veilig samen metenableTaggedPdf()aanroepen, omdat de methode idempotent is. - Schrijf semantische HTML. De parser wijst elk blokelement toe aan een structuurelement:
h1aanH1,paanP,ul/liaanL/LI, entableaanTable/TR/TD. - Sla het bestand op en valideer het vervolgens met een PDF/UA-checker.
Volledig voorbeeld
Sectie met titel “Volledig voorbeeld”<?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";Verwachte uitvoer
Sectie met titel “Verwachte uitvoer”Wrote accessible.pdf — validate with: verapdf --flavour ua2 accessible.pdfDe uitvoer bevat een structuurboom, /MarkInfo << /Marked true >>, de catalogus-/Lang-vermelding en de pdfuaid:part-XMP-markering. Voer de checker uit om te bevestigen dat deze onderdelen aanwezig en onderling consistent zijn.
Randgevallen
Sectie met titel “Randgevallen”- Aanroepvolgorde. Wanneer je
enableTaggedPdf()nawriteHtml()aanroept, wordt eerder geschreven inhoud niet met terugwerkende kracht getagd. Schakel de getagde modus daarom eerst in. - Taaltag. Geef
ConformancePolicy::strictUa2()mee als tweede argument om een onjuist gevormde BCP 47-tag bij de API-grens af te wijzen, in plaats van die tijdens het schrijven stilzwijgend te negeren. - Idempotent opnieuw inschakelen. Als je
enableTaggedPdf()tweemaal aanroept, werkt NextPDF de taal bij zonder de structuurboom die je al hebt gevuld opnieuw op te bouwen. - Handmatig taggen. Omhul items bij niet-HTML-inhoud met
beginTag()/endTag(). Containertypen (Table,TR,L,LI) worden groeperingselementen zonder gemarkeerde inhoud. Bladtypen (P,H1–H6,TD) krijgen MCID’s. - Ondersteuning is geen conformiteit. NextPDF genereert de structurele metadata die PDF/UA-2 nodig heeft. Daarnaast geeft het een waarschuwing over verminderde pariteit: voor productiegoedkeuring blijft externe oracle-validatie de verantwoordelijkheid van de aanroeper. Voer een checker uit voordat je stelt dat een bestand conform is.
Conformiteit
Sectie met titel “Conformiteit”| Bewering | Specificatie | Clausule | reference_id |
|---|---|---|---|
| Echte inhoud vereist een logische structuur. | ISO 14289-2 | §8.2.2 | |
| Structuurelementen houden een gedefinieerde nesting- en leesvolgorde aan. | ISO 14289-2 | §8.2.3 |
Dit recept laat zien hoe je de getagde structuur produceert die het toegankelijk opstellen van documenten ondersteunt. Het claimt geen PDF/UA-2-conformiteit; die beoordeling doet een checker.