İçeriğe geç
getnextpdf.com

HTML'den erişilebilir, etiketli bir PDF oluşturma

Bu tarifi, anlamsal HTML’den etiketli bir PDF oluşturmak için kullanın. NextPDF, mantıksal yapı ağacını, katalog dilini ve PDF/UA-2 işaretleyicilerini yazar. Uygunluk kararını bir denetleyici verir. Bu tarif, examples/31-pdfua2-tagged.php dosyasını temel alır.

  • Core’u kurun: composer require nextpdf/core:^3.
  • Doğrulama için bir PDF/UA doğrulayıcısı kullanın; örnekte veraPDF kullanılır.
  1. Belgeyi oluşturun.
  2. Önce enableTaggedPdf() işlevini bir Best Current Practice (BCP) 47 dil etiketiyle çağırın; bu çağrı önce, writeHtml() ise sonra gelmelidir. HTML işlem hattı ayrıştırıcıyı oluştururken etiketli modu algılar ve ardından etiketli içerik yayıcısını bağlar.
  3. Belge meta verilerini (başlık, dil) ayarlayın. setLanguage() işlevini enableTaggedPdf() ile birlikte güvenle çağırabilirsiniz, çünkü bu işlev idempotent’tir.
  4. Anlamsal HTML yazın. Ayrıştırıcı, her blok öğesini bir yapı öğesiyle eşler: h1 öğesini H1 ile, p öğesini P ile, ul/li öğelerini L/LI ile ve table öğesini Table/TR/TD ile eşler.
  5. Kaydedin ve ardından bir PDF/UA denetleyicisiyle doğrulayın.
<?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

Çıktı bir yapı ağacı, /MarkInfo << /Marked true >> ifadesi, katalog /Lang girdisi ve pdfuaid:part XMP işaretleyicisi içerir. Bu öğelerin var olduğunu ve kendi içinde tutarlı kaldığını doğrulamak için denetleyiciyi çalıştırın.

  • Çağrı sırası. enableTaggedPdf() işlevini writeHtml() çağrısından sonra çağırmak, daha önce yazılmış olan içeriği geriye dönük olarak etiketlemez. Önce etiketli modu etkinleştirin.
  • Dil etiketi. Hatalı biçimlendirilmiş bir BCP-47 etiketinin yazma sırasında sessizce atılması yerine API sınırında reddedilmesi için ikinci argüman olarak ConformancePolicy::strictUa2() değerini geçirin.
  • İdempotent yeniden etkinleştirme. enableTaggedPdf() işlevini iki kez çağırırsanız, NextPDF halihazırda doldurduğunuz yapı ağacını yeniden oluşturmadan dili günceller.
  • Elle etiketleme. HTML olmayan içerik için öğeleri beginTag() / endTag() ile sarmalayın. Kapsayıcı türleri (Table, THead, TBody, TFoot, TR, L, LI ve gruplama öğeleri Sect/Div/Art/Aside/BlockQuote) işaretli içeriği olmayan gruplama öğelerine dönüşür; doğrudan bir gruplama öğesi içine yerleştirilen başıboş satır içi içerik, sentezlenmiş bir P içinde sarmalanır. Yaprak türleri (P, H1H6, TD, TH) MCID alır.
  • Destek, uygunluk anlamına gelmez. NextPDF, PDF/UA-2’nin gerektirdiği yapısal meta verileri yayar. Ayrıca düşürülmüş eşlik uyarısını da gösterir: üretim onayı için harici oracle doğrulaması çağıran tarafın sorumluluğundadır. Bir dosyanın uygun olduğunu belirtmeden önce bir denetleyici çalıştırın.
  • Etiketli HTML tabloları ve gruplama öğeleri veraPDF ua2 denetiminden geçer. Etiketli bir <table> — düz, colspan/rowspan ile, sayfalar arasında bölünmüş ya da bir hücre içinde iç içe — Table/TR/TH/TD yapısını yayar (ISO 32000-2 §14.8; yayılan hücreler, Table 384’ün /ColSpan ve /RowSpan özniteliklerini taşır) ve gruplama öğeleri <section>/<div>/<article>/<aside>/<blockquote>, başıboş satır içi içeriği sentezlenmiş bir P içinde sarmalanmış olarak gruplama yapısı yayar. veraPDF --flavour ua2 bunlar genelinde hiçbir başarısızlık bildirmez. Bir durum hâlâ başarısız olur: satır içi bir öğenin içinde iç içe yerleşmiş bir blok öğe — bir bağlantı içindeki bir başlık, <a><h2>…</h2></a>Link shall not contain Hn hatasını tetikler; bu nedenle blok içeriği satır içi sarmalayıcıların dışında tutun. Bir dosyanın uygun olduğunu belirtmeden önce bir denetleyici çalıştırın.
İfadeStandartMadde
Gerçek içerik, mantıksal bir yapı gerektirir.ISO 14289-2§8.2.2
Yapı öğeleri, tanımlı bir iç içe geçme ve okuma sırasını izler.ISO 14289-2§8.2.3

Bu tarif, erişilebilir içerik üretimini destekleyen etiketli yapıyı nasıl oluşturacağınızı gösterir. PDF/UA-2 uygunluk iddiasında bulunmaz; kararı bir denetleyici verir.