สร้าง PDF ที่แท็กไว้เพื่อการเข้าถึงจาก HTML
ภาพรวมโดยย่อ
หัวข้อที่มีชื่อว่า “ภาพรวมโดยย่อ”ใช้สูตรนี้เพื่อสร้าง PDF ที่แท็กไว้จาก HTML เชิงความหมาย NextPDF จะเขียนทรีโครงสร้างเชิงตรรกะ ภาษาในแคตาล็อก และตัวบ่งชี้ PDF/UA-2 ส่วนเครื่องมือตรวจสอบจะเป็นผู้ตัดสินความสอดคล้องตามมาตรฐาน สูตรนี้อ้างอิงจาก examples/31-pdfua2-tagged.php
ข้อกำหนดเบื้องต้น
หัวข้อที่มีชื่อว่า “ข้อกำหนดเบื้องต้น”- ติดตั้ง Core:
composer require nextpdf/core:^3 - ใช้เครื่องมือตรวจสอบ PDF/UA สำหรับการตรวจสอบยืนยันความถูกต้อง ตัวอย่างนี้ใช้ veraPDF
- สร้างเอกสาร
- เรียก
enableTaggedPdf()พร้อมแท็กภาษาแบบ Best Current Practice (BCP) 47 ก่อนwriteHtml()ไปป์ไลน์ HTML จะตรวจพบโหมดที่มีการแท็กขณะสร้าง parser แล้วเชื่อมต่อตัวปล่อยเนื้อหาที่มีการแท็ก - ตั้งค่าเมตาดาตาของเอกสาร (ชื่อเรื่อง ภาษา) สามารถเรียก
setLanguage()ร่วมกับenableTaggedPdf()ได้อย่างปลอดภัย เพราะเป็น idempotent - เขียน HTML เชิงความหมาย โดย parser จะแมปอิลิเมนต์บล็อกแต่ละรายการไปยังอิลิเมนต์โครงสร้าง:
h1ไปยังH1,pไปยังP,ul/liไปยังL/LI, และtableไปยังTable/TR/TD - บันทึก แล้วตรวจสอบความถูกต้องด้วยเครื่องมือตรวจสอบ 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 exposea 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ผลลัพธ์จะมีทรีโครงสร้าง /MarkInfo << /Marked true >> รายการ /Lang ในแคตาล็อก และตัวบ่งชี้ XMP pdfuaid:part ให้เรียกใช้เครื่องมือตรวจสอบเพื่อยืนยันว่ารายการเหล่านี้มีอยู่และสอดคล้องกันภายในไฟล์
กรณีพิเศษ
หัวข้อที่มีชื่อว่า “กรณีพิเศษ”- ลำดับการเรียก การเรียก
enableTaggedPdf()หลังจากwriteHtml()จะไม่ย้อนกลับไปแท็กเนื้อหาที่เขียนไปแล้ว ให้เปิดใช้งานโหมดที่มีการแท็กก่อน - แท็กภาษา ส่ง
ConformancePolicy::strictUa2()เป็นอาร์กิวเมนต์ตัวที่สองเพื่อปฏิเสธแท็ก BCP-47 ที่มีรูปแบบไม่ถูกต้องตั้งแต่ขอบเขต API แทนที่จะละทิ้งโดยไม่แจ้งเตือนขณะเขียน - การเปิดใช้งานซ้ำแบบ idempotent หากเรียก
enableTaggedPdf()สองครั้ง NextPDF จะอัปเดตภาษาโดยไม่สร้างทรีโครงสร้างที่เติมข้อมูลไว้แล้วขึ้นมาใหม่ - การแท็กด้วยตนเอง สำหรับเนื้อหาที่ไม่ใช่ HTML ให้ครอบรายการด้วย
beginTag()/endTag()ประเภทคอนเทนเนอร์ (Table,TR,L,LI) จะกลายเป็นอิลิเมนต์การจัดกลุ่มที่ไม่มีเนื้อหาที่ทำเครื่องหมายไว้ ประเภทใบ (P,H1–H6,TD) จะได้รับ MCID - การรองรับไม่เท่ากับความสอดคล้องตามมาตรฐาน NextPDF สร้างเมตาดาตาเชิงโครงสร้างที่ PDF/UA-2 ต้องการ และจะแสดงคำเตือน degraded-parity ด้วย: สำหรับการอนุมัติใช้งานจริง การตรวจสอบความถูกต้องด้วย oracle ภายนอกเป็นความรับผิดชอบของผู้เรียก ให้เรียกใช้เครื่องมือตรวจสอบก่อนระบุว่าไฟล์สอดคล้องตามมาตรฐาน
ความสอดคล้องตามมาตรฐาน
หัวข้อที่มีชื่อว่า “ความสอดคล้องตามมาตรฐาน”| ข้อความระบุ | ข้อกำหนด | ข้อ | รหัสอ้างอิง (reference_id) |
|---|---|---|---|
| เนื้อหาจริงต้องมีโครงสร้างเชิงตรรกะ | ISO 14289-2 | §8.2.2 | |
| อิลิเมนต์โครงสร้างเป็นไปตามการซ้อนและลำดับการอ่านที่กำหนดไว้ | ISO 14289-2 | §8.2.3 |
สูตรนี้แสดงวิธีสร้างโครงสร้างที่มีการแท็กเพื่อรองรับการสร้างเนื้อหาที่เข้าถึงได้ สูตรนี้ไม่ได้ยืนยันความสอดคล้องตามมาตรฐาน PDF/UA-2 เครื่องมือตรวจสอบจะเป็นผู้ตัดสินเรื่องนั้น