PDF/UA-2-conformiteit: de getagde structuur die NextPDF voor ISO 14289-2 uitzendt
In een oogopslag
Sectie met titel “In een oogopslag”Grensverklaring. NextPDF zendt de getagde structuur uit die toegankelijk auteurschap ondersteunt; het claimt geen PDF/UA-2-conformiteit — dat bepaalt een checker.
PDF/UA-2 is ISO 14289-2:2024, het toegankelijkheidsprofiel dat boven op het getagde Portable Document Format (PDF) 2.0 ligt. Via Document::enableTaggedPdf() zendt NextPDF Core de structuurboom, de gemarkeerde inhoud, de catalogus- en structuurtaal en de pdfuaid-markering uit. De bibliotheek maakt de toegankelijke structuur; een PDF/UA-checker, zoals verapdf --flavour ua2, bepaalt de conformiteit. ISO 14289-2 §8.1 definieert conformiteit als bestandsformaatvereisten waaraan een document moet voldoen, beoordeeld door een checker, en niet als een claim die de producent zelf verklaart.
Installatie
Sectie met titel “Installatie”composer require nextpdf/core:^3Het taggen voor PDF/UA-2 is een Core-mogelijkheid (security.tagged_pdf). Er is geen Premium-pakket nodig om de getagde structuur zelf uit te zenden.
Conceptueel overzicht
Sectie met titel “Conceptueel overzicht”Document::enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null) stelt ConformanceMode::PdfUa2 in en koppelt TaggedContentEmitter. De modus is de enige bron van waarheid voor de vraag of het document volgens de specificatie is getagd; de writer voldoet daarna aan de structurele verplichtingen die ISO 14289-2 oplegt:
- Echte inhoud wordt getagd — §8.2.2: elk stuk echte inhoud dat geen artefact is, wordt in de logische structuur opgenomen, en artefacten worden als artefacten gemarkeerd. Dit bouwt voort op de getagde-PDF-structuur van ISO 32000-2 §14.7 (
StructTreeRoot, structuurelementen, MCID’s). - De natuurlijke taal wordt gedeclareerd — §8.4.4: het document en de taalwisselingen dragen een
Lang. MetConformancePolicy::strictUa2()wordt een onjuist gevormde BCP 47-tag aan de API-grens fail-fast afgewezen, in plaats van dat die bij het schrijven stilzwijgend wordt weggelaten. - Figuren dragen alternatieven — §8.5.1: elk
Figure-structuurelement heeft een alternatieve beschrijving. - Tabellen koppelen koppen en gegevens — §8.2.5.26: de koppeling tussen header/data-cellen in een tabel wordt structureel uitgedrukt.
NextPDF zendt deze structuren uit. Het voert de conformiteitsbeoordeling van §8.1 niet uit; volgens de standaard ligt die rol bij de checker.
API-oppervlak
Sectie met titel “API-oppervlak”| Methode | Effect |
|---|---|
enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null): static | Stelt ConformanceMode::PdfUa2 in, koppelt TaggedContentEmitter, valideert $lang volgens beleid. Gooit InvalidConfigException als het beleid Lang-validatie vereist en $lang ongeldig is. |
beginTag()/endTag() | Handmatige structuur voor niet-HTML-inhoud; containertypen worden groeperingselementen, leaftypen krijgen MCID’s. |
ConformanceMode::requiresPdfUa2PageTabs(): bool | Geeft true terug voor PdfUa2 — dwingt /Tabs /S op paginaniveau af. |
Codevoorbeeld — Snelstart
Sectie met titel “Codevoorbeeld — Snelstart”<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;use NextPDF\Conformance\ConformancePolicy;
$out = getenv('NEXTPDF_COOKBOOK_OUTPUT') ?: __DIR__ . '/accessible.pdf';
$doc = Document::createStandalone();$doc->enableTaggedPdf('en', ConformancePolicy::strictUa2()); // fail-fast Lang$doc->setTitle('Accessible report 2026');$doc->writeHtml('<h1>Quarterly report</h1><p>Body text.</p>' . '<img src="chart.png" alt="Revenue rose 12% quarter on quarter">');$doc->save($out);
echo "Wrote {$out} — validate: verapdf --flavour ua2 {$out}\n";Codevoorbeeld — Productie
Sectie met titel “Codevoorbeeld — Productie”De productiegate voert verapdf --flavour ua2 out.pdf uit en laat de build mislukken als de checker overtredingen rapporteert. De integratietest tests/Integration/Accessibility/VeraPdfUa2GoldenTest.php bevestigt dat de golden HTML→getagde-PDF-fixture veraPDF UA-2 doorstaat (overgeslagen als veraPDF ontbreekt). Het oordeel van de checker vormt de gate; de uitvoer van de emitter is de invoer voor die checker.
Randgevallen en valkuilen
Sectie met titel “Randgevallen en valkuilen”- Schakel eerst in.
enableTaggedPdf()nawriteHtml()tagt reeds geschreven inhoud niet met terugwerkende kracht. - Strikte taal. Geef
ConformancePolicy::strictUa2()mee om een onjuist gevormde BCP 47-tag op de API-grens af te wijzen, in plaats van de fout pas bij latere veraPDF-validatie te laten optreden. - Idempotent opnieuw inschakelen. Twee keer aanroepen werkt de taal bij zonder een gevulde structuurboom opnieuw op te bouwen.
- Leeg getagd document. Een leeg getagd document adverteert geen PDF/UA-2 (
EmptyTaggedPdfDoesNotAdvertisePdfUa2Test): de markering wordt niet uitgezonden voor een document zonder echte inhoud, zodat het bestand geen te ruime claim doet.
Prestaties
Sectie met titel “Prestaties”Het uitzenden van de structuurboom schaalt evenredig met het aantal elementen. Het budget is wall ≤ 1500 ms en piek ≤ 64 MB voor een typisch rapport.
Beveiligingsnotities
Sectie met titel “Beveiligingsnotities”Toegankelijkheidstagging is structureel, geen beveiligingsmaatregel. Het stelt de logische structuur van het document opzettelijk bloot aan ondersteunende technologie. De tagboom heeft geen vertrouwelijkheidsdimensie.
PDF/UA-2-toewijzing
Sectie met titel “PDF/UA-2-toewijzing”| PDF/UA-2-verplichting | ISO 14289-2-clausule | Uitzending door NextPDF |
|---|---|---|
| Echte inhoud getagd in logische structuur | §8.2.2 | TaggedContentEmitter + StructureTree |
| Document-/structuurtaal gedeclareerd | §8.4.4 | catalogus /Lang, gevalideerd via Bcp47Validator |
| Alternatieve beschrijving van figuur | §8.5.1 | alt → /Alt op het Figure-element |
| Koppeling van header/data in tabel | §8.2.5.26 | TR/TH/TD-structuur uit HTML-tabellen |
Tag → ISO 32000-2 §14.9 kruisverwijzing
Sectie met titel “Tag → ISO 32000-2 §14.9 kruisverwijzing”PDF/UA-2 bouwt voort op het getagde-PDF-model van ISO 32000-2. De structuurelementen die NextPDF uitzendt, worden gekoppeld aan de logische structuur van ISO 32000-2 §14.7 (StructTreeRoot, structuurelementen, MCID’s) — chunk — en aan de standaard structuurnaamruimte die voor PDF 2.0 is gedefinieerd. De rolkaart koppelt HTML-elementen (h1, p, table) aan standaard structuurtypen, zodat een UA-2-checker ze kan herkennen.
WCAG 2.2-toewijzing
Sectie met titel “WCAG 2.2-toewijzing”De getagde structuur vormt de technische basis voor de succescriteria van de Web Content Accessibility Guidelines (WCAG) 2.2 — 1.1.1 (alternatieven voor niet-tekst, via §8.5.1 Figure /Alt), 1.3.1 (informatie en relaties, via de structuurboom) en 1.3.2 (betekenisvolle volgorde, via de leesvolgorde). Het uitzenden van de structuur is noodzakelijk maar niet voldoende voor WCAG-conformiteit; een toegankelijkheidsaudit, niet de bibliotheek, bepaalt dat.
Gedrag in FIPS-modus
Sectie met titel “Gedrag in FIPS-modus”Bij het uitzenden voor PDF/UA-2 wordt geen cryptografie uitgevoerd. De modus Federal Information Processing Standards (FIPS) heeft geen effect op het pad voor de getagde structuur.
Conformiteit
Sectie met titel “Conformiteit”| Claim | Spec | Clausule | reference_id |
|---|---|---|---|
De PDF/UA-versie wordt geïdentificeerd door de schemanaamruimte pdfuaid (Tabel 1). | ISO 14289-2 | §5 | |
| Conformiteit met PDF/UA-2 legt bestandsformaatvereisten op waaraan een document moet voldoen (een checker beoordeelt de conformiteit; de producent verklaart die niet). | ISO 14289-2 | §8.1 | |
| Echte inhoud moet in de logische structuur worden getagd. | ISO 14289-2 | §8.2.2 | |
| De natuurlijke taal van het document moet worden gedeclareerd. | ISO 14289-2 | §8.4.4 | |
| Figure-elementen vereisen een alternatieve beschrijving. | ISO 14289-2 | §8.5.1 | |
| De tabelstructuur moet kop- en gegevenscellen koppelen. | ISO 14289-2 | §8.2.5.26 | |
| De toegankelijke structuur bouwt voort op de logische structuur voor getagde PDF van ISO 32000-2. | ISO 32000-2 | §14.7.2 |
Citaties verwijzen naar clausule-id en reference_id in het verificatiecorpus. Er wordt geen standaardtekst gereproduceerd.