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::Pdfua, ); $pdf->setCreator('tc-lib-pdf'); $pdf->setAuthor('Nicola Asuni'); $pdf->setTitle('PDF/UA Auto-Tagged HTML'); $pdf->setSubject('tc-lib-pdf example: 015 — pdfua mode HTML tagging showcase'); $pdf->setKeywords('TCPDF tc-lib-pdf pdfua tagged PDF accessibility HTML auto-tag structure'); $pdf->setPDFFilename('E015_pdfua.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 — Auto-Tagged HTML Showcase

' . '

Mode: pdfua (generic alias). This document demonstrates every HTML' . ' element that addHTMLCell() auto-tags with a PDF structure role.' . ' No beginStructElem() calls are required: the library maps each HTML tag' . ' to its PDF role automatically when a PDF/UA mode is active. The generic' . ' pdfua alias behaves identically to pdfua1 for structure-tree' . ' output and defaults to PDF 1.7.

' . '

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 in the structure tree,' . ' satisfying the PDF/UA requirement that no heading level may be skipped.

' . '

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-1 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 is written as' . ' /Alt in the Figure structure-element dictionary so screen readers' . ' can describe the image. The figcaption tag maps to' . ' Caption.
' . '
' . '

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

' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '' . '
Table 1 — HTML tags and their PDF/UA structure roles (auto-tagged by addHTMLCell)
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. The link text is accessible to screen readers via the structure tree.

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