Skip to content

Tipografi (HasTypography)

Trait HasTypography mengontrol tampilan visual teks: font family, style, ukuran, spasi, stretching, warna, bayangan, dan mode rendering. Semua method mengembalikan static untuk fluent chaining.

Mengatur Font

setFont()

Set font family, style, dan ukuran saat ini dalam satu panggilan.

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Teks normal', newLine: true)
    ->setFont('Helvetica', 'B', 14)
    ->cell(0, 10, 'Teks bold', newLine: true)
    ->setFont('Helvetica', 'BI', 16)
    ->cell(0, 10, 'Teks Bold Italic', newLine: true);

Style Font

Kombinasikan karakter style untuk menerapkan beberapa efek:

KodeStyle
''Regular
'B'Bold
'I'Italic
'BI'Bold Italic
'U'Underline
'D'Strikethrough
'O'Overline

Style dapat dikombinasikan secara bebas: 'BIU' menghasilkan teks bold, italic, bergaris bawah.

php
$pdf->setFont('Helvetica', 'BU', 12)
    ->cell(0, 10, 'Bold + Underline', newLine: true)
    ->setFont('Helvetica', 'ID', 12)
    ->cell(0, 10, 'Italic + Strikethrough', newLine: true)
    ->setFont('Helvetica', 'BO', 12)
    ->cell(0, 10, 'Bold + Overline', newLine: true);

setFontSize()

Ubah ukuran font tanpa mengganti family atau style.

php
$pdf->setFont('Helvetica', 'B', 12)
    ->cell(0, 10, 'Heading 12pt', newLine: true)
    ->setFontSize(10)
    ->cell(0, 10, 'Body text 10pt', newLine: true)
    ->setFontSize(8)
    ->cell(0, 10, 'Footnote 8pt', newLine: true);

Spasi dan Stretching

setFontSpacing()

Menyesuaikan spasi tambahan (dalam poin) yang disisipkan antara setiap pasangan karakter.

php
$pdf->setFont('Helvetica', '', 12)
    ->setFontSpacing(0)
    ->cell(0, 10, 'Spasi normal', newLine: true)
    ->setFontSpacing(1.5)
    ->cell(0, 10, 'Spasi diperlebar', newLine: true)
    ->setFontSpacing(-0.5)
    ->cell(0, 10, 'Spasi ketat', newLine: true)
    ->setFontSpacing(0);

setFontStretching()

Menerapkan scaling horizontal ke glyph. Nilai 100 adalah lebar normal.

php
$pdf->setFont('Helvetica', '', 14)
    ->setFontStretching(100)
    ->cell(0, 10, 'Lebar normal (100%)', newLine: true)
    ->setFontStretching(130)
    ->cell(0, 10, 'Diregangkan (130%)', newLine: true)
    ->setFontStretching(75)
    ->cell(0, 10, 'Dikondensasi (75%)', newLine: true)
    ->setFontStretching(100);

Mengukur Teks

getStringWidth()

Mengembalikan lebar (dalam unit pengguna) dari string yang di-render dengan font dan ukuran saat ini. Berguna untuk menghitung layout sebelum menggambar.

php
$pdf->setFont('Helvetica', '', 12);
$width = $pdf->getStringWidth('Invoice Total: $1,250.00');

// Gunakan lebar yang diukur untuk rata kanan cell
$pageWidth = $pdf->getPageWidth();
$rightMargin = $pdf->getRightMargin();
$pdf->setX($pageWidth - $rightMargin - $width)
    ->cell($width, 10, 'Invoice Total: $1,250.00');

Mode Rendering Teks

PDF mendefinisikan 8 mode rendering teks melalui enum TextRenderer. Mode ini mengontrol apakah teks diisi, di-stroke, digunakan sebagai clipping path, atau disembunyikan.

ModeNilaiEfek
Fill0Teks terisi normal (default)
Stroke1Outline saja
FillStroke2Terisi dengan outline
Invisible3Tersembunyi tapi dapat dipilih/dicari
FillClip4Isi, lalu tambah ke clipping path
StrokeClip5Stroke, lalu tambah ke clipping path
FillStrokeClip6Isi + stroke, lalu clip
Clip7Tambah ke clipping path saja
php
$pdf->setFont('Helvetica', 'B', 36)
    ->setTextRenderingMode(0)
    ->cell(0, 15, 'Teks terisi', newLine: true)
    ->setTextRenderingMode(1)
    ->cell(0, 15, 'Teks outline', newLine: true)
    ->setTextRenderingMode(2)
    ->cell(0, 15, 'Fill + Stroke', newLine: true)
    ->setTextRenderingMode(3)
    ->cell(0, 15, 'Invisible (tapi bisa dicari)', newLine: true)
    ->setTextRenderingMode(0);

Mode Invisible (3) sangat berguna untuk overlay OCR — Anda menempatkan teks yang dikenali di atas gambar yang dipindai sehingga PDF bisa dicari sementara gambar tetap terlihat.

Warna Teks

setTextColor()

Set warna teks menggunakan nilai RGB.

php
$pdf->setTextColor(0, 0, 0)          // Hitam
    ->cell(0, 10, 'Teks hitam', newLine: true)
    ->setTextColor(220, 50, 50)       // Merah
    ->cell(0, 10, 'Teks merah', newLine: true)
    ->setTextColor(0, 102, 204)       // Biru
    ->cell(0, 10, 'Teks biru', newLine: true)
    ->setTextColor(0, 0, 0);          // Reset ke hitam

Saat dipanggil dengan satu argumen, ini mengatur nilai grayscale (0 = hitam, 255 = putih).

php
$pdf->setTextColor(128)
    ->cell(0, 10, 'Teks abu-abu', newLine: true);

Bayangan Teks

setTextShadow()

Terapkan efek bayangan di bawah teks. Bayangan didefinisikan sebagai array asosiatif.

php
$pdf->setFont('Helvetica', 'B', 28)
    ->setTextShadow([
        'enabled'    => true,
        'depth_w'    => 0.4,    // Offset horizontal (mm)
        'depth_h'    => 0.4,    // Offset vertikal (mm)
        'color'      => [180, 180, 180],
        'opacity'    => 0.5,
        'blend_mode' => 'Normal',
    ])
    ->cell(0, 15, 'Heading dengan Bayangan', newLine: true)
    ->setTextShadow(['enabled' => false]);

Contoh Lengkap

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()

    // Judul — besar, bold, biru
    ->setFont('Helvetica', 'B', 24)
    ->setTextColor(0, 51, 102)
    ->cell(0, 14, 'Monthly Report', newLine: true)

    // Subjudul — regular, abu-abu, dengan spasi ekstra
    ->setFont('Helvetica', '', 12)
    ->setTextColor(100, 100, 100)
    ->setFontSpacing(1.0)
    ->cell(0, 10, 'February 2026', newLine: true)
    ->setFontSpacing(0)
    ->ln(5)

    // Body text — hitam, normal
    ->setFont('Times', '', 11)
    ->setTextColor(0, 0, 0)
    ->multiCell(0, 6, 'Revenue meningkat 12% dibandingkan kuartal sebelumnya. Biaya operasional tetap stabil, dan net margin meningkat 3 poin persentase.')
    ->ln(3)

    // Catatan kaki — kecil, italic, abu-abu
    ->setFont('Times', 'I', 8)
    ->setTextColor(150, 150, 150)
    ->cell(0, 5, '* Semua angka belum diaudit.')

    ->save('report.pdf');

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