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.
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:
| Kode | Style |
|---|---|
'' | 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.
$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.
$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.
$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.
$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.
$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.
| Mode | Nilai | Efek |
|---|---|---|
| Fill | 0 | Teks terisi normal (default) |
| Stroke | 1 | Outline saja |
| FillStroke | 2 | Terisi dengan outline |
| Invisible | 3 | Tersembunyi tapi dapat dipilih/dicari |
| FillClip | 4 | Isi, lalu tambah ke clipping path |
| StrokeClip | 5 | Stroke, lalu tambah ke clipping path |
| FillStrokeClip | 6 | Isi + stroke, lalu clip |
| Clip | 7 | Tambah ke clipping path saja |
$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.
$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 hitamSaat dipanggil dengan satu argumen, ini mengatur nilai grayscale (0 = hitam, 255 = putih).
$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.
$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
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');