Lbl + LBody auto-generated) * figure → Figure * img[alt] → Figure + /Alt (alt text written to struct-elem dictionary) * figcaption → Caption * table → Table (tr → TR, th → TH, td → TD, caption → Caption) * a → Link */ // NOTE: local file reads (images, fonts, attachments) are restricted to an allowlist of // trusted paths that covers this package tree, so run the examples in place. To read assets // from other locations, list them in the 'allowedPaths' entry of the fileOptions constructor // parameter (see E047_remote_resources_security.php). require __DIR__ . '/../vendor/autoload.php'; \define('K_PATH_FONTS', \realpath(__DIR__ . '/../vendor/tecnickcom/tc-lib-pdf-font/target/fonts')); $pdf = new \Com\Tecnick\Pdf\Tcpdf( unit: \Com\Tecnick\Pdf\Page\Unit::Millimeter, isunicode: true, subsetfont: false, compress: true, mode: \Com\Tecnick\Pdf\PdfConformance::Pdfua2, ); $pdf->setCreator('tc-lib-pdf'); $pdf->setAuthor('Nicola Asuni'); $pdf->setTitle('PDF/UA-2 Auto-Tagged HTML'); $pdf->setSubject('tc-lib-pdf example: 017 — pdfua2 mode HTML tagging showcase'); $pdf->setKeywords('TCPDF tc-lib-pdf pdfua2 PDF/UA-2 ISO14289-2 PDF2.0 tagged PDF accessibility HTML auto-tag'); $pdf->setPDFFilename('E017_pdfua2.pdf'); $pdf->setLanguage(code: 'en-US'); $font = $pdf->font->insert($pdf->pon, 'dejavusans', '', 10); // PDF/UA requires every font to be embedded. /
 default to the
// non-embedded standard-14 Courier, so register an embedded monospace font and
// select it for those elements.
$pdf->font->insert($pdf->pon, 'dejavusansmono', '', 10);
$pdf->setHTMLMonospaceFont('dejavusansmono');

$pdf->addPage();
$pdf->page->addContent($font['out']);

$imgPath = __DIR__ . '/images/tcpdf_logo.jpg';

$html =
    '

PDF/UA-2 — Auto-Tagged HTML Showcase

' . '

Mode: pdfua2 (ISO 14289-2, PDF 2.0). This document' . ' demonstrates every HTML element that addHTMLCell() auto-tags with a' . ' PDF/UA-2 structure role. PDF/UA-2 advances the accessible-PDF standard onto the' . ' PDF 2.0 generation: it uses the updated PDF/UA-2 XMP identification schema' . ' and targets PDF version 2.0 while applying the same structure-tree, MarkInfo,' . ' /Lang, and heading-clamping rules as PDF/UA-1. The document infrastructure' . ' difference is transparent to the HTML tagging layer — all roles map identically.

' . '

1 — Heading and Paragraph Roles

' . '

H3 Sub-heading

' . '

The h1-h6 tags map to PDF roles H1-H6.' . ' The p tag maps to P.' . ' Heading levels are clamped to prevent skipped levels: if an h3' . ' follows an h1 without an intervening h2, the library' . ' silently promotes it to H2 so the PDF/UA heading-nesting rule is not violated.

' . '

2 — Block Roles

' . '
“Tagged PDF is the foundation of accessible PDF. Without a' . ' well-formed structure tree, automated tools and assistive technologies cannot' . ' reliably interpret document content.” — ISO 14289 rationale
' . '

The blockquote tag maps to BlockQuote.

' . '

3 — List Structure (L > LI > Lbl + LBody)

' . '

Both ul and ol map to the L role.' . ' Each li auto-generates LI > {Lbl, LBody} children:

' . '' . '
    ' . '
  1. Ordered item — the number is auto-generated as the Lbl
  2. ' . '
  3. Body text is again auto-wrapped in LBody
  4. ' . '
  5. Nesting: L > LI > {Lbl, LBody}
  6. ' . '
' . '

4 — Figure, Image Alt-Text, and Caption

' . '
' . 'TCPDF logo: blue text on white background' . '
Figure 1 — TCPDF logo. The alt attribute becomes' . ' /Alt in the Figure structure-element dictionary.' . ' PDF/UA-2 (like PDF/UA-1) requires every Figure to carry an /Alt or' . ' /ActualText entry. The figcaption tag maps to' . ' Caption.
' . '
' . '

5 — Table Structure (Table > TR > TH/TD)

' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '
Table 1 — HTML tags and their PDF/UA-2 structure roles
HTML tagPDF structure roleCategory
h1–h6H1–H6Heading
pPBody
blockquoteBlockQuoteBody
preCodeBody
ul, olLList
liLI + Lbl + LBodyList
figureFigureIllustration
img (with alt)Figure + /AltIllustration
figcaption, captionCaptionIllustration
tableTableTable
trTRTable
tdTDTable
thTHTable
aLinkInline
' . '

6 — Hyperlink (Link Role)

' . '

This sentence contains a' . ' hyperlink to the tc-lib-pdf repository;' . ' the a element is tagged with the Link structure role' . ' automatically. In PDF/UA-2 (as in PDF/UA-1), link annotations must be accessible;' . ' the library derives the accessible name from the link text in the structure tree.

'; $pdf->addHTMLCell(html: $html, posx: 15, posy: 20, width: 180); $rawpdf = $pdf->getOutPDFString(); $pdf->renderPDF(rawpdf: $rawpdf);