跳轉到

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:內建無障礙檢查器(部分規則)

參見