Skip to content

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éthodeDescription
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é

php
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égorieBalises
RegroupementDocument, Part, Sect, Div, BlockQuote, Caption, NonStruct
TitresH1, H2, H3, H4, H5, H6
ParagraphesP, Span
ListesL, LI, Lbl, LBody
TableauxTable, TR, TH, TD, THead, TBody, TFoot
InlineLink, Em, Strong, Code
IllustrationsFigure, Formula, Form

Balisage de base

php
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

php
$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 :

php
$pdf->openTag('Figure', ['Alt' => 'Logo entreprise', 'ActualText' => 'Logo Acme Corp'])
    ->image('/path/to/logo.png', 10, 50, 40, 40)
    ->closeTag('Figure');

Attributs courants :

AttributDescription
AltTexte alternatif pour éléments non-textuels
ActualTextRemplacement de texte exact pour l'élément
LangSurcharge de langue pour cet élément (BCP 47)
TitleTitre 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 :

php
$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 :

  1. Le PDF balisé est activésetTaggedPdf(true)
  2. La langue du document est définiesetLanguage('fr-FR')
  3. Tout le contenu est balisé — pas de contenu non balisé en dehors des éléments de structure
  4. Toutes les images ont du texte alt — via paramètre alt: ou balise Figure avec attribut Alt
  5. Les tableaux utilisent TH pour les en-têtes — les cellules d'en-tête doivent être distinguées des cellules de données
  6. 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 :

php
$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');

Distribué sous licence LGPL-3.0-or-later.