Skip to content

PDF Taggato (Accessibilità)

Il modulo Accessibility (StructureTreeManager, RoleMap, TaggedContentManager) abilita output PDF taggato per screen reader e tecnologie assistive. Quando abilitato, ogni pezzo di contenuto è avvolto in elementi struttura che descrivono il suo ruolo semantico. Tutti i metodi tagging restituiscono static per concatenazione.

Riferimento Rapido

MetodoDescrizione
setTaggedPdf()Abilita o disabilita modalità PDF taggato
setLanguage()Imposta lingua primaria documento (BCP 47)
openTag()Inizia elemento struttura taggato
closeTag()Termina elemento struttura taggato
image(..., alt:)Aggiungi immagine con testo alt per accessibilità

Abilitazione PDF Taggato

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setTaggedPdf(true)
    ->setLanguage('en-US')
    ->addPage()
    ->setFont('Helvetica', '', 12);

Quando setTaggedPdf(true) è chiamato, il StructureTreeManager è inizializzato lazy e un dizionario MarkInfo con Marked = true è scritto nel catalogo PDF.

Elementi Struttura

TCPDF-Next supporta l'insieme tag standard PDF 2.0 completo:

CategoriaTag
RaggruppamentoDocument, Part, Sect, Div, BlockQuote, Caption, NonStruct
IntestazioniH1, H2, H3, H4, H5, H6
ParagrafiP, Span
ListeL, LI, Lbl, LBody
TabelleTable, TR, TH, TD, THead, TBody, TFoot
InlineLink, Em, Strong, Code
IllustrazioniFigure, Formula, Form

Tagging Base

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setTaggedPdf(true)
    ->setLanguage('en-US')
    ->addPage()
    ->setFont('Helvetica', '', 12)

    ->openTag('H1')
    ->cell(0, 10, 'Annual Report 2026', newLine: true)
    ->closeTag('H1')

    ->openTag('P')
    ->multiCell(0, 6, 'This document demonstrates tagged PDF output for accessibility compliance.')
    ->closeTag('P')

    ->save('tagged-basic.pdf');

I tag devono essere propriamente annidati. Il StructureTreeManager valida l'annidamento e lancia un'eccezione su mismatch.

Tabelle Taggate

php
$pdf->openTag('Table')
    ->openTag('TR')
    ->openTag('TH')->cell(50, 8, 'Quarter')->closeTag('TH')
    ->openTag('TH')->cell(50, 8, 'Revenue')->closeTag('TH')
    ->closeTag('TR')
    ->openTag('TR')
    ->openTag('TD')->cell(50, 8, 'Q1')->closeTag('TD')
    ->openTag('TD')->cell(50, 8, '$1,200,000')->closeTag('TD')
    ->closeTag('TR')
    ->closeTag('Table');

Attributi Tag

Passa attributi aggiuntivi quando apri un tag:

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

Attributi comuni:

AttributoDescrizione
AltTesto alternativo per elementi non-testo
ActualTextSostituzione testo esatto per l'elemento
LangOverride lingua per questo elemento (BCP 47)
TitleTitolo leggibile umano

Il metodo image() accetta anche un parametro alt come scorciatoia — $pdf->image('chart.png', 10, 80, 120, 60, alt: 'Revenue chart') avvolge automaticamente l'immagine in un tag Figure.

Mappatura Ruoli

Il RoleMap mappa nomi tag personalizzati a tipi struttura PDF standard. Questo ti consente di usare nomi dominio-specifici mentre mantieni compatibilità PDF/UA:

php
$pdf->openTag('Invoice', ['roleMap' => 'Sect'])
    ->openTag('LineItem', ['roleMap' => 'P'])
    ->cell(0, 8, 'Widget x 10 — $500.00', newLine: true)
    ->closeTag('LineItem')
    ->closeTag('Invoice');

La mappa ruoli è scritta alla radice albero struttura così i validatori risolvono tag personalizzati a equivalenti standard. Per contenuto multilingua, override lingua per-elemento: ->openTag('P', ['Lang' => 'de-DE']).

Conformità PDF/UA

Per produrre un documento completamente conforme PDF/UA, assicura:

  1. PDF taggato è abilitatosetTaggedPdf(true)
  2. Lingua documento è impostatasetLanguage('en-US')
  3. Tutto il contenuto è taggato — nessun contenuto non taggato fuori elementi struttura
  4. Tutte le immagini hanno testo alt — tramite parametro alt: o tag Figure con attributo Alt
  5. Le tabelle usano TH per intestazioni — celle intestazione devono essere distinte da celle dati
  6. I font sono incorporati — TCPDF-Next incorpora tutti i font per impostazione predefinita

Integrazione con PDF/A-4

PDF taggato è completamente compatibile con PDF/A-4. Abilita entrambi per documenti archivio + accessibili:

php
$pdf = Document::create()
    ->setTaggedPdf(true)
    ->setPdfA(true)
    ->setLanguage('en-US')
    ->setTitle('Accessible Archival Document')
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->openTag('H1')
    ->cell(0, 10, 'PDF/A-4 + PDF/UA Document', newLine: true)
    ->closeTag('H1')
    ->save('accessible-archival.pdf');

Rilasciato sotto licenza LGPL-3.0-or-later.