Skip to content

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

MethodDeskripsi
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

php
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:

KategoriTag
PengelompokanDocument, Part, Sect, Div, BlockQuote, Caption, NonStruct
HeadingH1, H2, H3, H4, H5, H6
ParagrafP, Span
ListL, LI, Lbl, LBody
TabelTable, TR, TH, TD, THead, TBody, TFoot
InlineLink, Em, Strong, Code
IlustrasiFigure, Formula, Form

Tagging Dasar

php
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

php
$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:

php
$pdf->openTag('Figure', ['Alt' => 'Logo perusahaan', 'ActualText' => 'Logo Acme Corp'])
    ->image('/path/to/logo.png', 10, 50, 40, 40)
    ->closeTag('Figure');

Atribut umum:

AtributDeskripsi
AltTeks alternatif untuk elemen non-teks
ActualTextPenggantian teks persis untuk elemen
LangOverride bahasa untuk elemen ini (BCP 47)
TitleJudul 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:

php
$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:

  1. Tagged PDF diaktifkansetTaggedPdf(true)
  2. Bahasa dokumen diatursetLanguage('id-ID')
  3. Semua konten bertag — tidak ada konten tanpa tag di luar elemen struktur
  4. Semua gambar memiliki alt text — melalui parameter alt: atau tag Figure dengan atribut Alt
  5. Tabel menggunakan TH untuk header — cell header harus dibedakan dari cell data
  6. 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:

php
$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');

Didistribusikan di bawah lisensi LGPL-3.0-or-later.