Bỏ qua để đến nội dung

Tạo PDF gắn thẻ hỗ trợ khả năng tiếp cận từ HTML

Dùng công thức này để tạo PDF gắn thẻ từ HTML ngữ nghĩa. NextPDF ghi cây cấu trúc logic, mục ngôn ngữ trong catalog và các điểm đánh dấu PDF/UA-2. Việc có tuân thủ hay không do công cụ kiểm tra quyết định. Công thức này dựa trên examples/31-pdfua2-tagged.php.

  • Cài đặt Core: composer require nextpdf/core:^3.
  • Dùng một công cụ kiểm tra PDF/UA để xác thực. Ví dụ này dùng veraPDF.
  1. Tạo tài liệu.
  2. Gọi enableTaggedPdf() với một thẻ ngôn ngữ Best Current Practice (BCP) 47 trước khi gọi writeHtml(). Pipeline HTML phát hiện chế độ gắn thẻ trong lúc dựng bộ phân tích cú pháp, rồi nối vào bộ phát nội dung gắn thẻ.
  3. Đặt metadata của tài liệu (tiêu đề, ngôn ngữ). Bạn có thể gọi setLanguage() cùng với enableTaggedPdf() một cách an toàn, vì hàm này có tính idempotent.
  4. Ghi HTML ngữ nghĩa. Bộ phân tích cú pháp ánh xạ mỗi phần tử khối thành một phần tử cấu trúc: h1 thành H1, p thành P, ul/li thành L/LI, và table thành Table/TR/TD.
  5. Lưu tệp, sau đó xác thực bằng một công cụ kiểm tra PDF/UA.
<?php
declare(strict_types=1);
require_once __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
$doc = Document::createStandalone();
// Step 2 — enable tagged mode BEFORE writeHtml(). The lang argument
// drives the catalog /Lang entry and the structure tree root language.
$doc->enableTaggedPdf(lang: 'en');
// Step 3 — metadata. setLanguage() restates intent; it is idempotent here.
$doc->setTitle('Accessible Report');
$doc->setLanguage('en');
$doc->addPage();
// Step 4 — semantic HTML. Each block element becomes a StructElem; text
// runs are wrapped in BDC/EMC operators with stable MCIDs.
$html = <<<'HTML'
<h1>Quarterly Accessibility Report</h1>
<p>This document opts into tagged PDF so assistive technology can expose
a meaningful reading order.</p>
<h2>Findings</h2>
<ul>
<li>Headings carry semantic roles.</li>
<li>Lists keep their item structure.</li>
</ul>
HTML;
$doc->writeHtml($html);
$doc->save(__DIR__ . '/accessible.pdf');
echo "Wrote accessible.pdf — validate with: verapdf --flavour ua2 accessible.pdf\n";
Wrote accessible.pdf — validate with: verapdf --flavour ua2 accessible.pdf

Tệp đầu ra bao gồm một cây cấu trúc, /MarkInfo << /Marked true >>, mục /Lang trong catalog và điểm đánh dấu XMP pdfuaid:part. Chạy công cụ kiểm tra để xác nhận các mục này hiện diện và nhất quán trong tệp.

  • Thứ tự gọi. Việc gọi enableTaggedPdf() sau writeHtml() không gắn thẻ hồi tố cho nội dung đã ghi trước đó. Bật chế độ gắn thẻ trước.
  • Thẻ ngôn ngữ. Truyền ConformancePolicy::strictUa2() làm đối số thứ hai để từ chối ngay tại ranh giới API một thẻ BCP-47 sai định dạng, thay vì âm thầm loại bỏ nó khi ghi.
  • Bật lại có tính idempotent. Nếu bạn gọi enableTaggedPdf() hai lần, NextPDF cập nhật ngôn ngữ mà không dựng lại cây cấu trúc đã tạo trước đó.
  • Gắn thẻ thủ công. Với nội dung không phải HTML, hãy bao bọc các mục bằng beginTag() / endTag(). Các kiểu vùng chứa (Table, TR, L, LI) trở thành phần tử nhóm không có nội dung được đánh dấu. Các kiểu lá (P, H1H6, TD) nhận MCID.
  • Hỗ trợ không phải là tuân thủ. NextPDF phát ra metadata cấu trúc mà PDF/UA-2 cần. Hệ thống cũng hiển thị cảnh báo về mức tương đương bị suy giảm: để phê duyệt cho môi trường production, trách nhiệm của bên gọi là xác thực bằng oracle bên ngoài. Chạy một công cụ kiểm tra trước khi bạn khẳng định rằng một tệp đã tuân thủ.
Tuyên bốĐặc tảĐiều khoảnreference_id
Nội dung thực cần một cấu trúc logic.ISO 14289-2§8.2.2
Các phần tử cấu trúc tuân theo trật tự lồng nhau và thứ tự đọc đã được xác định.ISO 14289-2§8.2.3

Công thức này minh họa cách tạo cấu trúc gắn thẻ để hỗ trợ việc soạn thảo có khả năng tiếp cận. Nó không khẳng định sự tuân thủ PDF/UA-2; điều đó do một công cụ kiểm tra quyết định.