Teks, font, dan dasar-dasar halaman
Pada tutorial pertama, Anda merender sebuah halaman dengan satu baris teks. Kali ini Anda mengendalikan halaman itu sendiri beserta teks di dalamnya. Anda akan memilih ukuran halaman, menulis judul dan paragraf, lalu memberi gaya menggunakan font bawaan mesin.
Yang akan Anda bangun
Bagian berjudul “Yang akan Anda bangun”Anda akan menulis dua skrip kecil. Masing-masing menghasilkan berkas Portable Document Format (PDF) satu halaman:
01-text-basics.phpmerender halaman A4 potret dengan judul berwarna, paragraf yang dibungkus otomatis, dan tiga contoh perataan.02-fonts.phpmerender halaman contoh yang membandingkan dua keluarga font bawaan pada beberapa ukuran.
Semuanya berjalan hanya dengan paket nextpdf/core. Anda tidak memerlukan
berkas font, ekstensi tambahan, maupun jaringan. Jika Anda belum menyiapkan
proyek, ikuti tutorial pertama
terlebih dahulu, lalu kembali ke sini.
Langkah 1: Beri gaya teks pada halaman A4
Bagian berjudul “Langkah 1: Beri gaya teks pada halaman A4”Setiap halaman memiliki ukuran dan orientasi. A4 adalah ukuran kertas
internasional yang umum, sedangkan Letter adalah padanannya di Amerika
Serikat. Orientasi berupa potret (tegak) atau lanskap (menyamping). Anda
meneruskan kedua pilihan itu ke addPage() saat memulai sebuah halaman.
Selanjutnya, tiga metode menangani penulisan. setFont() memilih jenis huruf
dan ukuran untuk teks berikutnya. cell() menulis satu baris di dalam kotak
tak terlihat. multiCell() membungkus teks yang lebih panjang ke sebanyak
baris yang diperlukan. Pada kedua metode, lebar 0 berarti “gunakan
seluruh ruang hingga margin kanan”.
Dua pemanggilan lain menangani tampilan. setTextColor() menerima nilai
merah, hijau, dan biru dari 0 hingga 255, dan berlaku sampai Anda mengubahnya
lagi. Enum Alignment, yaitu daftar pilihan bernama yang tetap, menyediakan
Left, Center, Right, dan Justify.
Buat 01-text-basics.php di folder proyek Anda:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Contracts\Alignment;use NextPDF\Contracts\Orientation;use NextPDF\Core\Document;use NextPDF\ValueObjects\PageSize;
@mkdir(__DIR__ . '/out');
$document = Document::createStandalone();$document->setTitle('Text basics');$document->addPage(PageSize::A4(), Orientation::Portrait);
// A colored heading. The values are red, green, and blue, each 0 to 255.$document->setFont('helvetica', 'B', 20);$document->setTextColor(30, 64, 175);$document->cell(0, 14, 'Project kickoff notes', newLine: true);$document->ln(4);
// Back to black for the body text.$document->setTextColor(0, 0, 0);$document->setFont('helvetica', '', 11);$document->multiCell( 0, 7, 'Welcome to the second tutorial. This paragraph is written with ' . 'multiCell(), so the engine wraps the words onto as many lines ' . 'as the page width requires.',);$document->ln(4);
$document->multiCell( 0, 7, 'Justified text stretches the spaces so both edges line up. It is a ' . 'good fit for report bodies and other long passages.', align: Alignment::Justify,);$document->ln(6);
// One line each: left, centered, and right.$document->setFont('helvetica', 'I', 11);$document->cell(0, 8, 'Left-aligned line', newLine: true, align: Alignment::Left);$document->cell(0, 8, 'Centered line', newLine: true, align: Alignment::Center);$document->cell(0, 8, 'Right-aligned line', newLine: true, align: Alignment::Right);
$document->save(__DIR__ . '/out/text-basics.pdf');
echo "Wrote out/text-basics.pdf\n";Jalankan dengan php 01-text-basics.php. Skrip mencetak
Wrote out/text-basics.pdf, dan berkasnya muncul di folder out/ yang baru.
Apa yang baru saja terjadi
Bagian berjudul “Apa yang baru saja terjadi”addPage(PageSize::A4(), Orientation::Portrait) membuat halaman sebelum teks
apa pun ditulis. Berikan Orientation::Landscape sebagai gantinya, maka
halaman yang sama akan berputar menyamping. Ukuran bernama lain, seperti
PageSize::A5() atau PageSize::Letter(), bekerja dengan cara yang sama.
setFont('helvetica', 'B', 20) memilih Helvetica tebal pada 20 poin. Poin
(pt) adalah satuan cetak tradisional; 72 poin setara dengan satu inci.
Judulnya berwarna biru karena setTextColor(30, 64, 175) sedang aktif ketika
pemanggilan cell() menulisnya. setTextColor(0, 0, 0) berikutnya
mengembalikan warna ke hitam untuk segala sesuatu setelahnya.
Kedua pemanggilan multiCell() membungkus paragrafnya secara otomatis. Yang
rata kiri-kanan meregangkan jarak antarkata sehingga kedua sisi sejajar,
kecuali pada baris terakhir paragraf. Di antara blok, ln() menggeser posisi
tulis ke bawah untuk menambah ruang. Terakhir, save() menyusun berkas dan
menuliskannya ke out/.
Untuk setiap parameter yang diterima metode-metode ini, lihat Menyusun teks dengan font dan perataan.
Langkah 2: Pilih di antara font bawaan
Bagian berjudul “Langkah 2: Pilih di antara font bawaan”Mesin ini menyertakan tiga keluarga teks bawaan: Helvetica, Times, dan Courier. Helvetica adalah jenis huruf sans-serif, artinya hurufnya tidak memiliki goresan ujung kecil (serif). Times adalah jenis huruf serif yang nyaman dibaca pada teks panjang bergaya cetakan. Courier memiliki lebar tetap, sehingga cocok untuk daftar kode dan struk. Karena keluarga ini bawaan, skrip Anda tidak memerlukan berkas font sama sekali.
Argumen gaya pada setFont() menggabungkan tanda satu huruf: 'B' untuk
tebal, 'I' untuk miring, dan 'U' untuk garis bawah. String kosong berarti
reguler, dan tanda-tanda dapat digabung, sehingga 'BI' menghasilkan tebal
miring.
Keluarga bawaan mencakup teks berbasis Latin. Untuk sistem penulisan lain atau jenis huruf merek Anda sendiri, Anda mendaftarkan berkas font, sebagaimana ditunjukkan oleh resep Menyematkan dan membuat subset font (pembuatan subset hanya menyimpan karakter yang benar-benar Anda gunakan, sehingga berkas tetap kecil). Matriks dukungan font mencantumkan setiap format font yang diterima mesin.
Buat 02-fonts.php di samping skrip pertama:
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use NextPDF\Core\Document;
@mkdir(__DIR__ . '/out');
$document = Document::createStandalone();$document->setTitle('Font sampler');$document->addPage();
$document->setFont('helvetica', 'B', 20);$document->cell(0, 14, 'Built-in font sampler', newLine: true);$document->ln(4);
// Helvetica: a sans-serif face, a solid default for labels and headings.$document->setFont('helvetica', 'B', 14);$document->cell(0, 10, 'Helvetica', newLine: true);foreach ([10, 12, 16] as $size) { $document->setFont('helvetica', '', (float) $size); $document->cell(0, $size * 0.8, "Helvetica sample at {$size}pt.", newLine: true);}$document->setFont('helvetica', 'BI', 12);$document->cell(0, 9, 'Helvetica bold italic for emphasis.', newLine: true);$document->ln(6);
// Times: a serif face that suits long, print-like passages.$document->setFont('times', 'B', 14);$document->cell(0, 10, 'Times', newLine: true);foreach ([10, 12, 16] as $size) { $document->setFont('times', '', (float) $size); $document->cell(0, $size * 0.8, "Times sample at {$size}pt.", newLine: true);}$document->setFont('times', 'I', 12);$document->cell(0, 9, 'Times italic for quotations.', newLine: true);
$document->save(__DIR__ . '/out/font-sampler.pdf');
echo "Wrote out/font-sampler.pdf\n";Jalankan dengan php 02-fonts.php lalu buka out/font-sampler.pdf. Anda akan
melihat kalimat contoh yang sama berubah karakter di antara kedua keluarga
font dan membesar melalui tiga ukuran.
Apa yang baru saja terjadi
Bagian berjudul “Apa yang baru saja terjadi”addPage() tanpa argumen menggunakan pengaturan halaman bawaan dalam
orientasi potret, sehingga tidak setiap skrip harus menyebutkan ukurannya
secara eksplisit. Setiap pemanggilan setFont() mengganti keluarga, gaya, atau
ukuran yang aktif di tengah halaman, dan sebuah font tetap aktif sampai
pemanggilan setFont() berikutnya.
Perulangan mengonversi ukuran dengan (float) karena setFont() mengharapkan
bilangan desimal. Tinggi baris mengikuti ukuran font ($size * 0.8),
sehingga teks yang lebih besar memperoleh baris yang lebih tinggi dan tidak
ada yang saling tumpang tindih. Coba ganti 'times' dengan 'courier' lalu
jalankan skrip lagi untuk melihat keluarga font ketiga.
Jika terjadi kesalahan
Bagian berjudul “Jika terjadi kesalahan”- Kesalahan “class not found” atau autoload biasanya berarti skrip tidak
menemukan
vendor/autoload.php. Jalankan di dalam folder proyek yang memuatvendor/. - Nama keluarga font yang salah ketik akan melempar eksepsi yang menyebutkan
font yang tidak dapat ditemukan. Periksa ejaannya:
helvetica,times,courier. - Pusat pemecahan masalah mengumpulkan perbaikan umum, dan Font dan penandaan membahas masalah font secara mendalam.
- Setiap eksepsi mesin didokumentasikan di rujukan kesalahan, lengkap dengan konteks yang dibawanya dan tindakan pemulihannya.
Selanjutnya
Bagian berjudul “Selanjutnya”Kini Anda dapat membentuk halaman, memberi gaya teks, dan memilih font dengan sengaja. Pada tutorial berikutnya Anda menempatkan gambar pada halaman dan menata konten dengan tabel dan daftar.