Skip to content

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

MetodoEffetto
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

php
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

php
$pdf->startTransform();  // Push stato grafico corrente
// ... operazioni disegno con trasformazioni ...
$pdf->stopTransform();   // Pop e ripristina stato precedente

Queste chiamate possono essere annidate. Ogni startTransform() pusha un nuovo stato sullo stack.

rotate()

php
$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()

php
$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()

php
$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()

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

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

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

Rilasciato sotto licenza LGPL-3.0-or-later.