Skip to content

Layout (HasLayout)

Trait HasLayout dan modul Layout menyediakan struktur level halaman: header, footer, layout multi-kolom, dan mode booklet. Modul ini terdiri dari PageManager, ColumnManager, BookletManager, dan HeaderFooterManager.

Semua method mengembalikan static, sehingga setiap panggilan bisa di-chain.

Header Built-in

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setHeaderData('logo.png', 30, 'Nama Perusahaan', 'Laporan yang dihasilkan — Rahasia')
    ->setHeaderMargin(10)
    ->setFooterMargin(10)
    ->addPage();

setHeaderData() menerima path logo, lebar logo, string judul, dan string deskripsi.

Callback Kustom

Untuk kontrol penuh, daftarkan callback yang menerima instance Document:

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create();

$pdf->setHeaderCallback(function (Document $doc) {
    $doc->setFont('Helvetica', 'B', 12)
        ->cell(0, 10, 'Perusahaan Saya — Rahasia', align: 'C', newLine: true)
        ->line(10, 18, 200, 18);
});

$pdf->setFooterCallback(function (Document $doc) {
    $doc->setY(-15)
        ->setFont('Helvetica', '', 8)
        ->cell(0, 10, 'Halaman ' . $doc->getPage() . '/' . $doc->getNumPages(), align: 'C');
});

$pdf->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Konten dengan header dan footer kustom');

Aktifkan / Nonaktifkan

php
$pdf->setPrintHeader(false);  // Sembunyikan rendering header
$pdf->setPrintFooter(false);  // Sembunyikan rendering footer

Margin

php
$pdf->setHeaderMargin(float $margin);  // Jarak di atas header
$pdf->setFooterMargin(float $margin);  // Jarak di bawah footer

Margin ini mendefinisikan jarak antara tepi halaman dan konten header/footer.

Layout Multi-Kolom

Mendefinisikan Kolom

php
$pdf = Document::create()
    ->addPage()
    ->setColumnsArray([
        ['w' => 90, 's' => 5],  // Kolom 1: lebar 90mm, jarak 5mm
        ['w' => 90, 's' => 0],  // Kolom 2: lebar 90mm
    ])
    ->setColumn(0)
    ->setFont('Helvetica', '', 10)
    ->multiCell(0, 5, 'Konten kolom kiri...')
    ->setColumn(1)
    ->multiCell(0, 5, 'Konten kolom kanan...');

Setiap entry mendefinisikan kolom dengan w (lebar) dan s (spasi). Gunakan setColumn() untuk beralih antar kolom.

Method Kolom

php
$pdf->setColumnsArray(array $columns);  // Definisikan struktur kolom
$pdf->setColumn(int $col);              // Beralih ke kolom (0-based)
$col = $pdf->getColumn();               // Dapatkan indeks kolom saat ini

Mode Booklet

Mode booklet bergantian antara margin dalam dan luar sehingga halaman bisa dilipat dan dijilid:

php
$pdf->setBooklet(bool $val, float $inner, float $outer);
ParameterDeskripsi
$valtrue untuk mengaktifkan, false untuk menonaktifkan
$innerMargin dalam (jilid) dalam mm
$outerMargin luar (tepi) dalam mm
php
$pdf = Document::create()
    ->setBooklet(true, 20, 10)
    ->addPage()   // Halaman ganjil: margin dalam di kiri
    ->cell(0, 10, 'Halaman 1 — margin kiri lebih lebar untuk jilid')
    ->addPage()   // Halaman genap: margin dalam di kanan
    ->cell(0, 10, 'Halaman 2 — margin kanan lebih lebar untuk jilid');

Pergantian margin terjadi secara otomatis pada setiap panggilan addPage().

Memilih Alat Layout yang Tepat

KebutuhanSolusi
Branding konsisten di setiap halamansetHeaderData() atau setHeaderCallback()
Nomor halaman di footersetFooterCallback() dengan getPage() / getNumPages()
Kolom gaya koransetColumnsArray() + setColumn()
Output booklet siap cetaksetBooklet()
Hilangkan header di halaman tertentusetPrintHeader(false) sebelum addPage()

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