Tagged PDF (Aksesibilitas)
Modul Accessibility (StructureTreeManager, RoleMap, TaggedContentManager) mengaktifkan output tagged PDF untuk screen reader dan teknologi asistif. Saat diaktifkan, setiap konten dibungkus dalam elemen struktur yang menjelaskan peran semantiknya. Semua method tagging mengembalikan static untuk chaining.
Referensi Cepat
| Method | Deskripsi |
|---|---|
setTaggedPdf() | Aktifkan atau nonaktifkan mode tagged PDF |
setLanguage() | Set bahasa utama dokumen (BCP 47) |
openTag() | Mulai elemen struktur bertag |
closeTag() | Akhiri elemen struktur bertag |
image(..., alt:) | Tambah gambar dengan alt text untuk aksesibilitas |
Mengaktifkan Tagged PDF
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setTaggedPdf(true)
->setLanguage('id-ID')
->addPage()
->setFont('Helvetica', '', 12);Saat setTaggedPdf(true) dipanggil, StructureTreeManager diinisialisasi secara lazy dan dictionary MarkInfo dengan Marked = true ditulis ke katalog PDF.
Elemen Struktur
TCPDF-Next mendukung set tag standar PDF 2.0 penuh:
| Kategori | Tag |
|---|---|
| Pengelompokan | Document, Part, Sect, Div, BlockQuote, Caption, NonStruct |
| Heading | H1, H2, H3, H4, H5, H6 |
| Paragraf | P, Span |
| List | L, LI, Lbl, LBody |
| Tabel | Table, TR, TH, TD, THead, TBody, TFoot |
| Inline | Link, Em, Strong, Code |
| Ilustrasi | Figure, Formula, Form |
Tagging Dasar
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setTaggedPdf(true)
->setLanguage('id-ID')
->addPage()
->setFont('Helvetica', '', 12)
->openTag('H1')
->cell(0, 10, 'Laporan Tahunan 2026', newLine: true)
->closeTag('H1')
->openTag('P')
->multiCell(0, 6, 'Dokumen ini mendemonstrasikan output tagged PDF untuk kepatuhan aksesibilitas.')
->closeTag('P')
->save('tagged-basic.pdf');Tag harus bersarang dengan benar. StructureTreeManager memvalidasi nesting dan melempar exception jika tidak cocok.
Tabel Bertag
$pdf->openTag('Table')
->openTag('TR')
->openTag('TH')->cell(50, 8, 'Kuartal')->closeTag('TH')
->openTag('TH')->cell(50, 8, 'Pendapatan')->closeTag('TH')
->closeTag('TR')
->openTag('TR')
->openTag('TD')->cell(50, 8, 'Q1')->closeTag('TD')
->openTag('TD')->cell(50, 8, '$1,200,000')->closeTag('TD')
->closeTag('TR')
->closeTag('Table');Atribut Tag
Berikan atribut tambahan saat membuka tag:
$pdf->openTag('Figure', ['Alt' => 'Logo perusahaan', 'ActualText' => 'Logo Acme Corp'])
->image('/path/to/logo.png', 10, 50, 40, 40)
->closeTag('Figure');Atribut umum:
| Atribut | Deskripsi |
|---|---|
Alt | Teks alternatif untuk elemen non-teks |
ActualText | Penggantian teks persis untuk elemen |
Lang | Override bahasa untuk elemen ini (BCP 47) |
Title | Judul yang bisa dibaca manusia |
Method image() juga menerima parameter alt sebagai shorthand — $pdf->image('chart.png', 10, 80, 120, 60, alt: 'Grafik pendapatan') secara otomatis membungkus gambar dalam tag Figure.
Role Mapping
RoleMap memetakan nama tag kustom ke tipe struktur PDF standar. Ini memungkinkan Anda menggunakan nama domain-specific sambil mempertahankan kompatibilitas PDF/UA:
$pdf->openTag('Invoice', ['roleMap' => 'Sect'])
->openTag('LineItem', ['roleMap' => 'P'])
->cell(0, 8, 'Widget x 10 — $500.00', newLine: true)
->closeTag('LineItem')
->closeTag('Invoice');Role map ditulis ke root structure tree sehingga validator menyelesaikan tag kustom ke padanan standar. Untuk konten multibahasa, override bahasa per elemen: ->openTag('P', ['Lang' => 'de-DE']).
Kepatuhan PDF/UA
Untuk menghasilkan dokumen yang sepenuhnya sesuai PDF/UA, pastikan:
- Tagged PDF diaktifkan —
setTaggedPdf(true) - Bahasa dokumen diatur —
setLanguage('id-ID') - Semua konten bertag — tidak ada konten tanpa tag di luar elemen struktur
- Semua gambar memiliki alt text — melalui parameter
alt:atau tagFiguredengan atributAlt - Tabel menggunakan
THuntuk header — cell header harus dibedakan dari cell data - Font di-embed — TCPDF-Next menyematkan semua font secara default
Integrasi dengan PDF/A-4
Tagged PDF sepenuhnya kompatibel dengan PDF/A-4. Aktifkan keduanya untuk dokumen arsip + accessible:
$pdf = Document::create()
->setTaggedPdf(true)
->setPdfA(true)
->setLanguage('id-ID')
->setTitle('Dokumen Arsip Accessible')
->addPage()
->setFont('Helvetica', '', 12)
->openTag('H1')
->cell(0, 10, 'Dokumen PDF/A-4 + PDF/UA', newLine: true)
->closeTag('H1')
->save('accessible-archival.pdf');