Value Object
TCPDF-Next menggunakan value object immutable untuk semua data geometri dan warna. Setiap value object dideklarasikan final readonly — setelah dibuat, tidak bisa diubah. Buat instance baru alih-alih mengubah yang sudah ada.
PageSize
Merepresentasikan dimensi halaman dalam point (1 pt = 1/72 inci).
use Yeeefang\TcpdfNext\ValueObjects\PageSize;
// Seri A ISO 216
$a4 = PageSize::A4(); // 595.28 x 841.89 pt
// Pergantian orientasi (mengembalikan instance baru)
$landscape = PageSize::A4()->landscape(); // 841.89 x 595.28 pt
$portrait = PageSize::A4()->portrait(); // 595.28 x 841.89 pt
// Dari nama string
$letter = PageSize::fromName('Letter');
// Ukuran kustom dalam point
$custom = new PageSize(400.0, 600.0, 'custom');Factory Method
| Seri | Method |
|---|---|
| ISO A | A0(), A1(), A2(), A3(), A4(), A5(), A6() |
| ISO B | B0(), B1(), B2(), B3(), B4(), B5() |
| Amerika Utara | Letter(), Legal(), Tabloid() |
Margin
Mendefinisikan margin halaman dalam milimeter.
use Yeeefang\TcpdfNext\ValueObjects\Margin;
// Nilai yang sama di keempat sisi
$uniform = Margin::uniform(10.0); // 10mm semua sisi
// Simetris: vertikal dan horizontal
$symmetric = Margin::symmetric(15.0, 10.0); // 15mm atas/bawah, 10mm kiri/kanan
// Tanpa margin
$zero = Margin::zero();
// Eksplisit: atas, kanan, bawah, kiri
$explicit = new Margin(20.0, 15.0, 25.0, 15.0);Akses sisi individual melalui property public readonly: $margin->top, $margin->right, $margin->bottom, $margin->left.
Position dan Dimension
Pasangan koordinat dan ukuran sederhana dengan property public readonly.
use Yeeefang\TcpdfNext\ValueObjects\{Position, Dimension};
$pos = new Position(50.0, 100.0); // $pos->x, $pos->y
$dim = new Dimension(210.0, 297.0); // $dim->width, $dim->heightUnit
Menangani definisi unit dan konversi antara point, milimeter, sentimeter, dan inci.
use Yeeefang\TcpdfNext\ValueObjects\Unit;
$mm = Unit::mm(); // Juga: Unit::pt(), Unit::cm(), Unit::in()
// Konversi antar unit
$points = Unit::convert(25.4, Unit::mm(), Unit::pt()); // 25.4mm = 72pt
$inches = Unit::convert(72.0, Unit::pt(), Unit::in()); // 72pt = 1inReferensi Konversi
| Dari | Ke Point |
|---|---|
| 1 pt | 1.0 |
| 1 mm | 2.8346 |
| 1 cm | 28.3465 |
| 1 in | 72.0 |
Color
Class Color berada di namespace Graphics dan mendukung model warna RGB, CMYK, grayscale, dan spot. Seperti semua value object, class ini immutable.
use Yeeefang\TcpdfNext\Graphics\Color;
// RGB (0-255)
$red = Color::rgb(255, 0, 0);
$orange = Color::rgb(255, 102, 0);
// CMYK (0-100)
$processBlack = Color::cmyk(0, 0, 0, 100);
$cyan = Color::cmyk(100, 0, 0, 0);
// Grayscale (0-255, di mana 0 = hitam, 255 = putih)
$gray = Color::gray(128);
// Spot color (nama + fallback CMYK)
$pantone = Color::spot('Pantone 151 C', 0, 60, 100, 0);Menggabungkan Semuanya
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\ValueObjects\{PageSize, Margin, Unit};
use Yeeefang\TcpdfNext\Graphics\Color;
$landscape = PageSize::A4()->landscape();
$margins = Margin::symmetric(15.0, 10.0);
$orange = Color::rgb(255, 102, 0);
$pdf = Document::create()
->addPage($landscape, margin: $margins)
->setFont('Helvetica', '', 12)
->setTextColor($orange)
->cell(0, 10, 'Styled with value objects')
->save('styled.pdf');Semua value object adalah final readonly. Method seperti landscape() dan portrait() mengembalikan instance baru -- mereka tidak pernah mengubah yang asli. Ini membuat value object aman untuk dibagikan antar halaman, thread, dan batas fungsi tanpa perlu defensive copying.