Layer (OCG)
PDF layer — secara formal disebut Optional Content Group (OCG) — memungkinkan Anda membuat konten yang bisa di-toggle on dan off di viewer, atau secara selektif dimasukkan saat mencetak. Sistem layer dikelola melalui Graphics\LayerManager dan diakses melalui API fluent Document.
Semua method mengembalikan static, sehingga setiap panggilan bisa di-chain.
Referensi Cepat
| Method | Tujuan |
|---|---|
startLayer() | Mulai layer baru dengan nama tertentu |
endLayer() | Tutup layer saat ini |
Contoh Dasar
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
// Terlihat di viewer, tidak dicetak
->startLayer('Screen Only', print: false, view: true)
->cell(0, 10, 'Teks ini muncul di layar tapi tidak saat dicetak', newLine: true)
->endLayer()
// Hanya dicetak
->startLayer('Print Only', print: true, view: false)
->cell(0, 10, 'Teks ini muncul hanya saat dicetak', newLine: true)
->endLayer()
// Selalu terlihat
->cell(0, 10, 'Teks ini selalu terlihat', newLine: true);startLayer()
$pdf->startLayer(string $name, bool $print = true, bool $view = true): staticMemulai layer baru. Semua konten yang digambar setelah panggilan ini masuk ke layer tersebut sampai endLayer() dipanggil.
| Parameter | Tipe | Deskripsi |
|---|---|---|
$name | string | Nama tampilan yang ditunjukkan di panel layer viewer |
$print | bool | Apakah konten layer muncul saat dicetak |
$view | bool | Apakah konten layer muncul di layar |
endLayer()
Menutup layer saat ini. Konten yang digambar setelah panggilan ini tidak lagi menjadi bagian dari layer manapun.
Mode Visibilitas Layer
Kombinasi $print dan $view memberikan empat mode visibilitas yang berguna:
$print | $view | Perilaku |
|---|---|---|
true | true | Selalu terlihat (default) |
false | true | Hanya layar — tersembunyi saat dicetak |
true | false | Hanya cetak — tersembunyi di layar |
false | false | Awalnya tersembunyi di mana-mana (user bisa toggle) |
Layer Bersarang
Layer bisa disarangkan. Layer anak mewarisi batasan visibilitas dari parent-nya -- jika parent tersembunyi, anak juga tersembunyi.
$pdf->startLayer('Parent')
->cell(0, 10, 'Konten parent', newLine: true)
->startLayer('Child', print: false, view: true)
->cell(0, 10, 'Konten anak — hanya layar', newLine: true)
->endLayer()
->endLayer();Kasus Penggunaan
PDF Multi-Bahasa
Tempatkan setiap terjemahan di layer terpisah. Pembaca bisa toggle bahasa di panel layer:
$pdf->startLayer('English')
->cell(0, 10, 'Hello, World!', newLine: true)
->endLayer()
->startLayer('Chinese')
->cell(0, 10, '你好,世界!', newLine: true)
->endLayer();Watermark (Hanya Layar)
$pdf->startLayer('Watermark', print: false, view: true)
->setFont('Helvetica', 'B', 48)
->setTextColor(200, 200, 200)
->text(60, 140, 'DRAFT')
->endLayer();Crop Mark Hanya Cetak
$pdf->startLayer('Crop Marks', print: true, view: false)
->cropMark(20, 20, 10, 10)
->cropMark(190, 20, 10, 10)
->endLayer();Tips
- Nama layer harus singkat dan deskriptif -- nama tersebut muncul apa adanya di panel layer viewer.
- Adobe Acrobat dan Foxit Reader memiliki dukungan OCG penuh; viewer berbasis browser mungkin mengabaikan layer.
- Layer menambah overhead minimal ke ukuran file karena hanya berupa flag metadata, bukan konten duplikat.