Skip to content

無障礙(PDF/UA)

Pro — Commercial License Required
PDF/UA 無障礙功能需要 Pro 套件。

TCPDF-Next Pro 提供完整的 PDF/UA(ISO 14289-2)支援,讓產生的 PDF 文件能被螢幕閱讀器與輔助技術正確解讀,服務視障及其他身心障礙使用者。

核心類別

類別說明
StructureTreeManager自動建構文件結構樹
RoleMap自訂標籤名稱到標準結構類型的對應

啟用標記式 PDF

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setTaggedPdf(true)
    ->setLanguage('zh-TW');

啟用後,StructureTreeManager 會自動追蹤所有結構標籤,在輸出時建構完整的結構樹。

結構元素

使用 openTagcloseTag 標記文件內容的語意結構:

php
$pdf->openTag('H1')
    ->cell(0, 10, '2026 年度報告', newLine: true)
    ->closeTag('H1')

    ->openTag('P')
    ->multiCell(0, 6, '本報告概述公司年度營運成果與財務狀況...')
    ->closeTag('P');

支援的結構元素

元素用途PDF/UA 要求
Document根結構元素必須
Part文件主要區塊選用
Sect區段選用
H1 -- H6標題層級必須按層級使用
P段落文字內容必須標記
Table表格必須包含 TH/TD
TR表格列必須在 Table 內
TH表頭儲存格資料表必須有表頭
TD資料儲存格必須在 TR 內
L清單必須包含 LI
LI清單項目必須在 L 內
Figure圖片與圖表必須有替代文字
Link超連結必須有連結文字
Span行內內容用於語言標記

RoleMap 角色對應

將自訂標籤名稱對應到標準 PDF 結構類型,提高程式碼的語意可讀性:

php
$pdf->setRoleMap([
    'invoice-header'  => 'H1',
    'line-item'       => 'TR',
    'item-desc'       => 'TD',
    'item-amount'     => 'TD',
    'summary'         => 'P',
    'company-logo'    => 'Figure',
]);

// 使用自訂標籤
$pdf->openTag('invoice-header')
    ->cell(0, 10, '發票明細', newLine: true)
    ->closeTag('invoice-header');

替代文字

所有非裝飾性圖片都必須提供替代文字,讓螢幕閱讀器能描述圖片內容:

php
$pdf->image(
    '/path/to/revenue-chart.png',
    x: 10, y: 50, width: 100, height: 80,
    alt: '營收圖表:第一季 120 萬、第二季 135 萬、第三季 142 萬、第四季 158 萬'
);

裝飾性圖片應標記為裝飾元素(artifact),使其不出現在結構樹中:

php
$pdf->artifact(function ($pdf) {
    $pdf->image('/path/to/decorative-border.png', x: 0, y: 0, width: 210);
});

語言標記

文件必須設定主要語言,並可對個別內容區塊標記不同語言:

php
$pdf->setLanguage('zh-TW');   // 文件主要語言

// 對特定段落標記不同語言
$pdf->openTag('P', ['lang' => 'en-US'])
    ->multiCell(0, 6, 'This section is in English.')
    ->closeTag('P');

$pdf->openTag('P', ['lang' => 'ja-JP'])
    ->multiCell(0, 6, 'このセクションは日本語です。')
    ->closeTag('P');

表格無障礙

資料表格必須有正確的表頭結構,讓螢幕閱讀器能建立儲存格與表頭的關聯:

php
$pdf->openTag('Table')
    ->openTag('TR')
        ->openTag('TH')->cell(40, 8, '品名')->closeTag('TH')
        ->openTag('TH')->cell(30, 8, '數量')->closeTag('TH')
        ->openTag('TH')->cell(30, 8, '金額')->closeTag('TH')
    ->closeTag('TR')
    ->openTag('TR')
        ->openTag('TD')->cell(40, 8, 'Widget A')->closeTag('TD')
        ->openTag('TD')->cell(30, 8, '100')->closeTag('TD')
        ->openTag('TD')->cell(30, 8, 'NT$ 5,000')->closeTag('TD')
    ->closeTag('TR')
    ->closeTag('Table');

結合 PDF/A-4 與 PDF/UA

建立同時符合歸檔與無障礙標準的文件:

php
use Yeeefang\TcpdfNext\Pro\Archive\PdfAManager;
use Yeeefang\TcpdfNext\Pro\Archive\PdfAVersion;

$pdf = Document::create()
    ->setTaggedPdf(true)
    ->setLanguage('zh-TW');

$manager = new PdfAManager($pdf);
$manager->enable(PdfAVersion::A4);
$manager->setOutputIntent(/* ... */);

// 文件同時符合 PDF/A-4 與 PDF/UA-2
$pdf->addPage()
    ->openTag('H1')
    ->font('Helvetica', size: 18)
    ->cell(0, 10, '無障礙歸檔文件', newLine: true)
    ->closeTag('H1')
    ->save('/output/pdfa4-pdfua.pdf');

下一步

以 LGPL-3.0-or-later 授權釋出。