Skip to content

Transform (HasTransforms)

Trait HasTransforms menyediakan transformasi geometri yang mengubah cara operasi gambar berikutnya di-render. Transformasi beroperasi pada Current Transformation Matrix (CTM) dan harus dibungkus dalam pasangan startTransform() / stopTransform() untuk mengisolasi efeknya.

Semua method mengembalikan static, sehingga setiap panggilan bisa di-chain.

Referensi Cepat

MethodEfek
startTransform()Simpan graphics state (push CTM)
stopTransform()Kembalikan graphics state (pop CTM)
rotate()Putar di sekitar titik
scale()Skalakan secara horizontal dan vertikal
translate()Pindahkan origin koordinat
skew()Geser sepanjang sumbu X dan Y
mirrorH()Mirror horizontal
mirrorV()Mirror vertikal
mirrorP()Mirror terhadap titik
mirrorL()Mirror terhadap garis sembarang

Contoh Dasar

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)

    // Teks yang diputar
    ->startTransform()
    ->rotate(45, 105, 60)
    ->text(100, 55, 'Rotated 45°')
    ->stopTransform()

    // Persegi panjang yang diskalakan
    ->startTransform()
    ->scale(150, 150, 50, 150)
    ->rect(40, 140, 20, 20, 'DF')
    ->stopTransform()

    // Teks yang di-mirror
    ->startTransform()
    ->mirrorH(105)
    ->text(100, 200, 'Mirrored')
    ->stopTransform();

WARNING

Selalu bungkus transformasi dalam pasangan startTransform() / stopTransform(). Lupa stopTransform() membuat graphics state tetap termodifikasi untuk semua operasi berikutnya.

startTransform / stopTransform

php
$pdf->startTransform();  // Push graphics state saat ini
// ... operasi gambar dengan transform ...
$pdf->stopTransform();   // Pop dan kembalikan state sebelumnya

Panggilan ini bisa disarangkan. Setiap startTransform() mendorong state baru ke stack.

rotate()

php
$pdf->rotate(float $angle, float $x = '', float $y = '');

Memutar konten berikutnya sebesar $angle derajat berlawanan arah jarum jam di sekitar titik (x, y). Jika x dan y dihilangkan, posisi saat ini digunakan.

scale()

php
$pdf->scale(float $sx, float $sy, float $x = '', float $y = '');

Menskalakan konten sebesar $sx persen secara horizontal dan $sy persen secara vertikal, relatif terhadap titik (x, y). Nilai 100 berarti tidak ada perubahan; 200 menggandakan ukuran.

translate()

php
$pdf->translate(float $tx, float $ty);

Menggeser origin koordinat sebesar $tx secara horizontal dan $ty secara vertikal. Semua koordinat berikutnya digeser sebesar jumlah ini sampai transform dihentikan.

skew()

php
$pdf->skew(float $angleX, float $angleY, float $x = '', float $y = '');

Menerapkan transformasi shear. $angleX menggeser sepanjang sumbu X dan $angleY sepanjang sumbu Y, keduanya dalam derajat.

Method Mirror

php
$pdf->mirrorH(float $x = '');                              // Mirror horizontal terhadap sumbu vertikal di x
$pdf->mirrorV(float $y = '');                              // Mirror vertikal terhadap sumbu horizontal di y
$pdf->mirrorP(float $x = '', float $y = '');               // Mirror terhadap titik
$pdf->mirrorL(float $angle, float $x = '', float $y = ''); // Mirror terhadap garis melalui (x, y) pada sudut
php
$pdf->startTransform()
    ->mirrorH(105)
    ->setFont('Helvetica', '', 14)
    ->text(80, 50, 'Flipped horizontally')
    ->stopTransform();

Menggabungkan Transform

Beberapa transform bisa ditumpuk dalam satu blok. Mereka diterapkan sesuai urutan pemanggilan.

php
$pdf->startTransform()
    ->translate(20, 20)
    ->rotate(30)
    ->scale(120, 120)
    ->rect(10, 10, 40, 20, 'DF')
    ->stopTransform();

Dukungan CTM Penuh

Untuk kasus penggunaan lanjutan, Current Transformation Matrix yang mendasari sepenuhnya dapat diakses. Matrix enam elemen [a, b, c, d, e, f] dipetakan ke matrix transformasi PDF standar, memberikan kontrol penuh atas transformasi affine saat method convenience tidak mencukupi.

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