Tagged PDF (Accessibilité)
Le module Accessibilité (StructureTreeManager, RoleMap, TaggedContentManager) active la sortie PDF balisée pour les lecteurs d'écran et technologies d'assistance. Lorsqu'activé, chaque élément de contenu est enveloppé dans des éléments de structure qui décrivent son rôle sémantique. Toutes les méthodes de balisage retournent static pour le chaînage.
Référence rapide
| Méthode | Description |
|---|---|
setTaggedPdf() | Activer ou désactiver le mode PDF balisé |
setLanguage() | Définir la langue principale du document (BCP 47) |
openTag() | Commencer un élément de structure balisé |
closeTag() | Terminer un élément de structure balisé |
image(..., alt:) | Ajouter une image avec texte alt pour l'accessibilité |
Activation du PDF balisé
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setTaggedPdf(true)
->setLanguage('fr-FR')
->addPage()
->setFont('Helvetica', '', 12);Lorsque setTaggedPdf(true) est appelé, le StructureTreeManager est initialisé paresseusement et un dictionnaire MarkInfo avec Marked = true est écrit dans le catalogue PDF.
Éléments de structure
TCPDF-Next supporte l'ensemble complet de balises standard PDF 2.0 :
| Catégorie | Balises |
|---|---|
| Regroupement | Document, Part, Sect, Div, BlockQuote, Caption, NonStruct |
| Titres | H1, H2, H3, H4, H5, H6 |
| Paragraphes | P, Span |
| Listes | L, LI, Lbl, LBody |
| Tableaux | Table, TR, TH, TD, THead, TBody, TFoot |
| Inline | Link, Em, Strong, Code |
| Illustrations | Figure, Formula, Form |
Balisage de base
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setTaggedPdf(true)
->setLanguage('fr-FR')
->addPage()
->setFont('Helvetica', '', 12)
->openTag('H1')
->cell(0, 10, 'Rapport annuel 2026', newLine: true)
->closeTag('H1')
->openTag('P')
->multiCell(0, 6, 'Ce document démontre la sortie PDF balisée pour la conformité accessibilité.')
->closeTag('P')
->save('tagged-basic.pdf');Les balises doivent être correctement imbriquées. Le StructureTreeManager valide l'imbrication et lève une exception en cas de non-correspondance.
Tableaux balisés
$pdf->openTag('Table')
->openTag('TR')
->openTag('TH')->cell(50, 8, 'Trimestre')->closeTag('TH')
->openTag('TH')->cell(50, 8, 'Revenus')->closeTag('TH')
->closeTag('TR')
->openTag('TR')
->openTag('TD')->cell(50, 8, 'T1')->closeTag('TD')
->openTag('TD')->cell(50, 8, '1 200 000 $')->closeTag('TD')
->closeTag('TR')
->closeTag('Table');Attributs de balise
Passer des attributs supplémentaires lors de l'ouverture d'une balise :
$pdf->openTag('Figure', ['Alt' => 'Logo entreprise', 'ActualText' => 'Logo Acme Corp'])
->image('/path/to/logo.png', 10, 50, 40, 40)
->closeTag('Figure');Attributs courants :
| Attribut | Description |
|---|---|
Alt | Texte alternatif pour éléments non-textuels |
ActualText | Remplacement de texte exact pour l'élément |
Lang | Surcharge de langue pour cet élément (BCP 47) |
Title | Titre lisible |
La méthode image() accepte également un paramètre alt comme raccourci — $pdf->image('chart.png', 10, 80, 120, 60, alt: 'Graphique revenus') enveloppe automatiquement l'image dans une balise Figure.
Mappage de rôles
Le RoleMap mappe des noms de balises personnalisés aux types de structure PDF standard. Cela vous permet d'utiliser des noms spécifiques au domaine tout en maintenant la compatibilité PDF/UA :
$pdf->openTag('Facture', ['roleMap' => 'Sect'])
->openTag('LigneArticle', ['roleMap' => 'P'])
->cell(0, 8, 'Widget x 10 — 500,00 $', newLine: true)
->closeTag('LigneArticle')
->closeTag('Facture');Le mappage de rôles est écrit dans la racine de l'arbre de structure pour que les validateurs résolvent les balises personnalisées en équivalents standard. Pour le contenu multilingue, surchargez la langue par élément : ->openTag('P', ['Lang' => 'en-US']).
Conformité PDF/UA
Pour produire un document entièrement conforme PDF/UA, assurez-vous :
- Le PDF balisé est activé —
setTaggedPdf(true) - La langue du document est définie —
setLanguage('fr-FR') - Tout le contenu est balisé — pas de contenu non balisé en dehors des éléments de structure
- Toutes les images ont du texte alt — via paramètre
alt:ou baliseFigureavec attributAlt - Les tableaux utilisent
THpour les en-têtes — les cellules d'en-tête doivent être distinguées des cellules de données - Les polices sont intégrées — TCPDF-Next intègre toutes les polices par défaut
Intégration avec PDF/A-4
Le PDF balisé est entièrement compatible avec PDF/A-4. Activez les deux pour des documents archivables + accessibles :
$pdf = Document::create()
->setTaggedPdf(true)
->setPdfA(true)
->setLanguage('fr-FR')
->setTitle('Document archivable accessible')
->addPage()
->setFont('Helvetica', '', 12)
->openTag('H1')
->cell(0, 10, 'Document PDF/A-4 + PDF/UA', newLine: true)
->closeTag('H1')
->save('accessible-archival.pdf');