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
| Method | Efek |
|---|---|
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
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
$pdf->startTransform(); // Push graphics state saat ini
// ... operasi gambar dengan transform ...
$pdf->stopTransform(); // Pop dan kembalikan state sebelumnyaPanggilan ini bisa disarangkan. Setiap startTransform() mendorong state baru ke stack.
rotate()
$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()
$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()
$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()
$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
$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$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.
$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.