Skip to content

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).

php
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

SeriMethod
ISO AA0(), A1(), A2(), A3(), A4(), A5(), A6()
ISO BB0(), B1(), B2(), B3(), B4(), B5()
Amerika UtaraLetter(), Legal(), Tabloid()

Margin

Mendefinisikan margin halaman dalam milimeter.

php
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.

php
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->height

Unit

Menangani definisi unit dan konversi antara point, milimeter, sentimeter, dan inci.

php
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 = 1in

Referensi Konversi

DariKe Point
1 pt1.0
1 mm2.8346
1 cm28.3465
1 in72.0

Color

Class Color berada di namespace Graphics dan mendukung model warna RGB, CMYK, grayscale, dan spot. Seperti semua value object, class ini immutable.

php
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

php
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.

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