إنشاء ملف 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 الوضع الموسوم عند بناء المحلّل، ثم يربط باعث المحتوى الموسوم. - عيّن بيانات المستند الوصفية (العنوان، اللغة). يمكنك استدعاء
setLanguage()بأمان معenableTaggedPdf()لأن ذلك عديم التأثير عند التكرار. - اكتب HTML دلاليًا. يربط المحلّل كل عنصر كتلي بعنصر بنية:
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 بدلًا من إسقاطه بصمت أثناء الكتابة. - إعادة التفعيل عديمة التأثير عند التكرار. إذا استدعيت
enableTaggedPdf()مرتين، يحدّث NextPDF اللغة دون إعادة بناء شجرة البنية التي سبق أن ملأتها. - الوسم اليدوي. بالنسبة للمحتوى غير HTML، غلّف العناصر بـ
beginTag()/endTag(). تصبح أنواع الحاويات (Table،TR،L،LI) عناصر تجميع دون محتوى موسوم. تحصل الأنواع الطرفية (P،H1–H6،TD) على معرّفات MCID. - الدعم لا يعني المطابقة. يُصدر NextPDF البيانات الوصفية البنيوية التي يحتاجها PDF/UA-2. ويُظهر أيضًا تحذيرًا عن تدهور التكافؤ: للاعتماد الإنتاجي، يتحمل المستدعي مسؤولية التحقق خارجيًا عبر مرجع موثوق. شغّل أداة فحص قبل أن تعلن أن ملفًا مطابقًا.
المطابقة
قسم بعنوان «المطابقة»| العبارة | المواصفة | البند | reference_id |
|---|---|---|---|
| يستلزم المحتوى الفعلي بنية منطقية. | ISO 14289-2 | §8.2.2 | |
| تلتزم عناصر البنية بتداخل وترتيب قراءة محدَّدين. | ISO 14289-2 | §8.2.3 |
توضح هذه الوصفة كيفية إنتاج البنية الموسومة التي تدعم التأليف المراعي لإمكانية الوصول. ولا تؤكد مطابقة PDF/UA-2؛ فأداة الفحص هي التي تحدد ذلك.