Creare da HTML un PDF taggato per l'accessibilità
In breve
Sezione intitolata “In breve”Questa ricetta crea un PDF taggato da HTML semantico. NextPDF genera l’albero della struttura logica, la lingua del catalogo e i marcatori PDF/UA-2. La conformità viene stabilita da un checker. La ricetta segue examples/31-pdfua2-tagged.php.
Prerequisiti
Sezione intitolata “Prerequisiti”- Core installato:
composer require nextpdf/core:^3. - Un validatore PDF/UA per la verifica. L’esempio usa veraPDF.
Ricetta
Sezione intitolata “Ricetta”- Creare il documento.
- Chiamare
enableTaggedPdf()con un tag di lingua BCP-47 prima diwriteHtml(). La pipeline HTML rileva la modalità taggata durante la costruzione del parser e aggancia l’emettitore del contenuto taggato. - Impostare i metadati del documento (titolo, lingua).
setLanguage()è idempotente rispetto aenableTaggedPdf(). - Scrivere HTML semantico. Il parser associa ciascun elemento di blocco a un elemento di struttura:
h1aH1,paP,ul/liaL/LI,tableaTable/TR/TD. - Salvare e quindi convalidare con un checker PDF/UA.
Esempio completo
Sezione intitolata “Esempio completo”<?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";Output previsto
Sezione intitolata “Output previsto”Wrote accessible.pdf — validate with: verapdf --flavour ua2 accessible.pdfL’output contiene un albero della struttura, /MarkInfo << /Marked true >>, la voce /Lang del catalogo e il marcatore XMP pdfuaid:part. Eseguire il checker per confermare che tali elementi siano presenti e coerenti internamente.
Casi limite
Sezione intitolata “Casi limite”- Ordine delle chiamate.
enableTaggedPdf()dopowriteHtml()non tagga retroattivamente il contenuto già scritto. Abilitare prima la modalità taggata. - Tag di lingua. Passare
ConformancePolicy::strictUa2()come secondo argomento per rifiutare un tag BCP-47 malformato al perimetro dell’API, anziché scartarlo silenziosamente in fase di scrittura. - Ri-abilitazione idempotente. Chiamare
enableTaggedPdf()due volte aggiorna la lingua senza ricostruire l’albero della struttura già popolato. - Tagging manuale. Per i contenuti non HTML, delimitare gli elementi con
beginTag()/endTag(). I tipi contenitore (Table,TR,L,LI) diventano elementi di raggruppamento privi di contenuto marcato; i tipi foglia (P,H1–H6,TD) ottengono gli MCID. - Il supporto non è conformità. NextPDF emette i metadati strutturali richiesti da PDF/UA-2. Espone inoltre un avviso di parità ridotta: ai fini dell’approvazione in produzione, la convalida tramite un oracolo esterno resta responsabilità del chiamante. Eseguire un checker prima di dichiarare che un file è conforme.
Conformità
Sezione intitolata “Conformità”| Dichiarazione | Specifica | Clausola | reference_id |
|---|---|---|---|
| Il contenuto reale richiede una struttura logica. | ISO 14289-2 | §8.2.2 | |
| Gli elementi della struttura seguono un annidamento e un ordine di lettura definiti. | ISO 14289-2 | §8.2.3 |
Questa ricetta mostra come produrre la struttura taggata a supporto della creazione accessibile. Non dichiara la conformità PDF/UA-2; tale decisione spetta a un checker.