Aller au contenu

Conformité PDF/UA-2 : structure balisée émise par NextPDF pour ISO 14289-2

Énoncé de la limite. NextPDF émet la structure balisée qui prend en charge un contenu créé de manière accessible ; il ne déclare pas la conformité PDF/UA-2 : c’est un vérificateur qui en décide.

PDF/UA-2 correspond à ISO 14289-2:2024, le profil d’accessibilité qui s’ajoute au PDF 2.0 balisé. NextPDF Core émet l’arbre de structure, le contenu marqué, la langue du catalogue/de la structure et le marqueur pdfuaid via Document::enableTaggedPdf(). La bibliothèque produit la structure accessible ; un vérificateur PDF/UA (par exemple verapdf --flavour ua2) décide de la conformité. ISO 14289-2 §8.1 présente la conformité comme un ensemble d’exigences de format de fichier qu’un document doit satisfaire, évaluées par un vérificateur, et non comme quelque chose qu’un producteur déclare.

Fenêtre de terminal
composer require nextpdf/core:^3

Le balisage PDF/UA-2 est une fonctionnalité de Core (security.tagged_pdf). Aucun paquet Premium n’est requis pour la structure balisée elle-même.

Document::enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null) définit ConformanceMode::PdfUa2 et raccorde TaggedContentEmitter. Le mode est la source unique de vérité pour savoir si le document est balisé selon la spécification ; le writer répond ensuite aux obligations structurelles imposées par ISO 14289-2 :

  • Le contenu réel est balisé — §8.2.2 : chaque élément de contenu réel (non-artefact) est inclus dans la structure logique ; les artefacts sont marqués comme tels. Cela s’appuie sur la structure PDF balisé du §14.7 d’ISO 32000-2 (StructTreeRoot, éléments de structure, MCID).
  • La langue naturelle est déclarée — §8.4.4 : le document et les changements de langue portent un Lang. Avec ConformancePolicy::strictUa2(), une balise BCP-47 mal formée est rejetée à la frontière de l’API (fail-fast), au lieu d’être ignorée silencieusement au moment de l’écriture.
  • Les figures portent des alternatives — §8.5.1 : chaque élément de structure Figure possède une description alternative.
  • Les tableaux associent en-têtes et données — §8.2.5.26 : l’association entre les cellules header/data d’un tableau est exprimée structurellement.

NextPDF émet ces éléments. Elle n’exécute pas l’évaluation de conformité du §8.1 : c’est le rôle du vérificateur, et la norme le lui réserve.

MéthodeEffet
enableTaggedPdf(string $lang = 'en', ?ConformancePolicy $policy = null): staticDéfinit ConformanceMode::PdfUa2, branche TaggedContentEmitter, valide $lang selon la politique. Lève InvalidConfigException lorsque la politique impose la validation de Lang et que $lang est invalide.
beginTag()/endTag()Structure manuelle du contenu non-HTML ; les types conteneurs deviennent des éléments de regroupement, les types feuilles reçoivent des MCID.
ConformanceMode::requiresPdfUa2PageTabs(): boolVrai pour PdfUa2 — déclenche l’application de /Tabs /S sur la page.
<?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";

Le gate de production exécute verapdf --flavour ua2 out.pdf et fait échouer le build en cas de violations signalées. Le test d’intégration tests/Integration/Accessibility/VeraPdfUa2GoldenTest.php vérifie que la fixture de référence HTML→PDF balisé passe veraPDF UA-2 (ignoré quand veraPDF est absent). Le verdict du vérificateur constitue le gate ; la sortie de l’émetteur en est l’entrée.

  • Active-le d’abord. Appeler enableTaggedPdf() après writeHtml() ne balise pas rétroactivement le contenu déjà écrit.
  • Langue stricte. Passe ConformancePolicy::strictUa2() pour rejeter une balise BCP-47 mal formée à la frontière de l’API, au lieu d’attendre un échec lors de la validation veraPDF a posteriori.
  • Réactivation idempotente. Un second appel met à jour la langue sans reconstruire un arbre de structure déjà rempli.
  • Document balisé vide. Un document balisé vide n’annonce pas PDF/UA-2 (EmptyTaggedPdfDoesNotAdvertisePdfUa2Test) — le marqueur n’est pas émis pour un document sans contenu réel, si bien que le fichier ne surestime pas sa conformité.

L’émission de l’arbre de structure est proportionnelle au nombre d’éléments. Budget fixé à un temps écoulé ≤ 1500 ms et à un pic ≤ 64 Mo pour un rapport typique.

Le balisage d’accessibilité est structurel : ce n’est pas un contrôle de sécurité. Il expose la structure logique du document aux technologies d’assistance, par conception ; il n’y a aucune dimension de confidentialité dans l’arbre de balises.

Obligation PDF/UA-2Clause ISO 14289-2Émission NextPDF
Contenu réel balisé dans la structure logique§8.2.2TaggedContentEmitter + StructureTree
Langue du document/de la structure déclarée§8.4.4catalogue /Lang, validé via Bcp47Validator
Description alternative de figure§8.5.1alt/Alt sur l’élément Figure
Association header/data dans les tableaux§8.2.5.26Structure TR/TH/TD dérivée des tableaux HTML

Référence croisée balise → ISO 32000-2 §14.9

Section intitulée « Référence croisée balise → ISO 32000-2 §14.9 »

PDF/UA-2 s’ajoute au modèle de PDF balisé d’ISO 32000-2. Les éléments de structure que NextPDF émet se résolvent par rapport à la structure logique du §14.7 d’ISO 32000-2 (StructTreeRoot, éléments de structure, MCID) — chunk — ainsi qu’à l’espace de noms de structure standard défini pour PDF 2.0. La table de correspondance des rôles relie les éléments HTML (h1, p, table) aux types de structure standard, afin qu’un vérificateur UA-2 les reconnaisse.

La structure balisée est le socle technique des critères de succès WCAG 2.2 — 1.1.1 (alternatives non textuelles, via la Figure /Alt du §8.5.1), 1.3.1 (information et relations, via l’arbre de structure) et 1.3.2 (séquence significative, via l’ordre de lecture). Émettre la structure est nécessaire, mais pas suffisant pour la conformité WCAG ; c’est un audit d’accessibilité, et non la bibliothèque, qui en décide.

L’émission PDF/UA-2 n’effectue aucune cryptographie. Le mode FIPS n’a aucun effet sur le chemin d’émission de la structure balisée.

AffirmationSpécificationClausereference_id
La version PDF/UA est identifiée par l’espace de noms de schéma pdfuaid (Table 1).ISO 14289-2§5
La conformité à PDF/UA-2 impose des exigences de format de fichier qu’un document doit satisfaire (un vérificateur évalue la conformité ; le producteur ne la déclare pas).ISO 14289-2§8.1
Le contenu réel doit être balisé dans la structure logique.ISO 14289-2§8.2.2
La langue naturelle du document doit être déclarée.ISO 14289-2§8.4.4
Les éléments Figure requièrent une description alternative.ISO 14289-2§8.5.1
La structure du tableau doit associer les cellules d’en-tête et de données.ISO 14289-2§8.2.5.26
La structure accessible repose sur la structure logique de PDF balisé d’ISO 32000-2.ISO 32000-2§14.7.2

Les citations sont des pointeurs clause-id + reference_id vers le corpus de vérification. Aucun texte normatif n’est reproduit.