PDF/UA 無障礙合規¶
PDF/UA(Universal Accessibility,ISO 14289)是 PDF 文件無障礙的國際標準,確保殘障人士能透過輔助技術(如螢幕閱讀器)完整存取 PDF 內容。NextPDF 支援最新的 PDF/UA-2(ISO 14289-2,基於 PDF 2.0)。
啟用 PDF/UA-2 合規模式¶
use NextPDF\Core\Configuration;
use NextPDF\Core\Conformance;
$config = Configuration::create(
conformance: Conformance::PDF_UA_2, // 啟用 PDF/UA-2 合規模式
taggedPdf: true, // 自動啟用(Conformance 包含此項)
title: 'Accessible Annual Report', // 必要:非空標題
documentLanguage: 'zh-TW', // 必要:文件語言
);
PDF/UA-2 合規要求¶
必要結構要求¶
| 要求 | 說明 | NextPDF 處理方式 |
|---|---|---|
MarkInfo Marked=true | 文件必須標記 | 自動設定 |
| StructTreeRoot | 必須有結構樹根節點 | 自動建立 |
| 非空標題 | DocTitle 非空 | 設定時驗證 |
| 文件語言 | Lang 屬性 | 設定時強制 |
| 圖形 Alt 文字 | Figure 結構元素必須有 Alt | 渲染時警告 |
| 所有字型嵌入 | 禁止不嵌入字型 | 自動強制 |
| 編碼空間 | ToUnicode CMap | 自動生成 |
結構要求¶
// PDF/UA-2 模式下,以下操作會在 finalize() 前自動驗證:
// 1. 所有非裝飾性圖形必須有 Alt 文字
// 2. 表格必須有 TH 標頭(含 Scope 屬性)
// 3. 清單必須使用正確的 L/LI/Lbl/LBody 結構
// 4. 標題序列(H1→H2→H3)不可跳層
// 5. 所有連結必須有可理解的文字
合規驗證¶
use NextPDF\Accessibility\PdfUaValidator;
use NextPDF\Accessibility\ValidationReport;
$validator = PdfUaValidator::create();
$report = $validator->validate(
pdf: $document->finalize(),
level: PdfUaLevel::UA2,
);
// 顯示驗證結果
echo "Valid: " . ($report->isValid() ? 'Yes' : 'No') . PHP_EOL;
foreach ($report->getErrors() as $error) {
echo "[ERROR] Rule {$error->getRuleId()}: {$error->getMessage()}" . PHP_EOL;
echo " Location: {$error->getLocation()}" . PHP_EOL;
}
foreach ($report->getWarnings() as $warning) {
echo "[WARN] {$warning->getMessage()}" . PHP_EOL;
}
表格無障礙¶
use NextPDF\Accessibility\StructureType;
use NextPDF\Accessibility\TableScope;
// 建立無障礙表格結構
$table = $structTree->root()->addChild(StructureType::Table);
$table->setAttribute('Summary', 'Financial results for FY2026');
$headerRow = $table->addChild(StructureType::TR);
$th1 = $headerRow->addChild(StructureType::TH);
$th1->setAttribute('Scope', TableScope::Column); // Column | Row | Both
$th1->setAlternateText('Product Name');
$td1 = $headerRow->addChild(StructureType::TD);
$td1->setAttribute('Headers', 'th-product-name'); // 關聯標頭
語言標注¶
// 文件中局部語言切換
$spanElem = $section->addChild(StructureType::Span);
$spanElem->setAttribute('Lang', 'en'); // 局部語言覆蓋
$document->text()->write(
text: 'The term "PDF/UA" stands for Universal Accessibility.',
position: Position::at(x: 20.0, y: 100.0),
structureElement: $spanElem,
);
PAC 與第三方驗證工具¶
NextPDF 的內建驗證器以 PDF/UA 規格為基準。建議同時使用第三方工具進行最終驗證:
- PAC 2024(PDF Accessibility Checker):Windows 免費工具,業界標準
- CommonLook PDF Validator:商業工具,報告最詳盡
- Adobe Acrobat Pro:內建無障礙檢查器(部分規則)
參見¶
- Tagged PDF — StructureTree 與 StructureElement API
- 文件中繼資料 — 文件語言與標題設定
- Enterprise PDF/A-4 — PDF/A-4 合規(含 UA)