Trasformazioni (HasTransforms)
Il trait HasTransforms fornisce trasformazioni geometriche che modificano come le operazioni disegno successive vengono renderizzate. Le trasformazioni operano sulla Current Transformation Matrix (CTM) e devono essere avvolte in coppie startTransform() / stopTransform() per isolare i loro effetti.
Tutti i metodi restituiscono static, quindi ogni chiamata può essere concatenata.
Riferimento Rapido
| Metodo | Effetto |
|---|---|
startTransform() | Salva stato grafico (push CTM) |
stopTransform() | Ripristina stato grafico (pop CTM) |
rotate() | Ruota attorno a un punto |
scale() | Scala orizzontalmente e verticalmente |
translate() | Sposta origine coordinate |
skew() | Inclina lungo assi X e Y |
mirrorH() | Specchia orizzontalmente |
mirrorV() | Specchia verticalmente |
mirrorP() | Specchia attorno a un punto |
mirrorL() | Specchia attorno a linea arbitraria |
Esempio Base
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
// Testo ruotato
->startTransform()
->rotate(45, 105, 60)
->text(100, 55, 'Rotated 45°')
->stopTransform()
// Rettangolo scalato
->startTransform()
->scale(150, 150, 50, 150)
->rect(40, 140, 20, 20, 'DF')
->stopTransform()
// Testo specchiato
->startTransform()
->mirrorH(105)
->text(100, 200, 'Mirrored')
->stopTransform();WARNING
Avvolgi sempre trasformazioni in coppie startTransform() / stopTransform(). Dimenticare stopTransform() lascia lo stato grafico modificato per tutte le operazioni successive.
startTransform / stopTransform
$pdf->startTransform(); // Push stato grafico corrente
// ... operazioni disegno con trasformazioni ...
$pdf->stopTransform(); // Pop e ripristina stato precedenteQueste chiamate possono essere annidate. Ogni startTransform() pusha un nuovo stato sullo stack.
rotate()
$pdf->rotate(float $angle, float $x = '', float $y = '');Ruota contenuto successivo di $angle gradi in senso antiorario attorno al punto (x, y). Se x e y sono omessi, viene usata la posizione corrente.
scale()
$pdf->scale(float $sx, float $sy, float $x = '', float $y = '');Scala contenuto di $sx percento orizzontalmente e $sy percento verticalmente, relativo al punto (x, y). Un valore di 100 significa nessun cambiamento; 200 raddoppia la dimensione.
translate()
$pdf->translate(float $tx, float $ty);Shifta origine coordinate di $tx orizzontalmente e $ty verticalmente. Tutte le coordinate successive sono offset di questa quantità fino a quando la trasformazione è fermata.
skew()
$pdf->skew(float $angleX, float $angleY, float $x = '', float $y = '');Applica trasformazione shear. $angleX inclina lungo asse X e $angleY lungo asse Y, entrambi in gradi.
Metodi Mirror
$pdf->mirrorH(float $x = ''); // Mirror orizzontale attorno asse verticale a x
$pdf->mirrorV(float $y = ''); // Mirror verticale attorno asse orizzontale a y
$pdf->mirrorP(float $x = '', float $y = ''); // Mirror attorno a un punto
$pdf->mirrorL(float $angle, float $x = '', float $y = ''); // Mirror attorno linea attraverso (x, y) ad angolo$pdf->startTransform()
->mirrorH(105)
->setFont('Helvetica', '', 14)
->text(80, 50, 'Flipped horizontally')
->stopTransform();Combinare Trasformazioni
Trasformazioni multiple possono essere stackate dentro un singolo blocco. Vengono applicate nell'ordine chiamato.
$pdf->startTransform()
->translate(20, 20)
->rotate(30)
->scale(120, 120)
->rect(10, 10, 40, 20, 'DF')
->stopTransform();Supporto CTM Completo
Per casi d'uso avanzati, la Current Transformation Matrix sottostante è completamente accessibile. La matrice sei-elementi [a, b, c, d, e, f] mappa alla matrice trasformazione PDF standard, dando controllo completo su trasformazioni affini quando i metodi convenience non sono sufficienti.