Transformations (HasTransforms)
Le trait HasTransforms fournit des transformations géométriques qui modifient la façon dont les opérations de dessin suivantes sont rendues. Les transformations opèrent sur la Matrice de Transformation Courante (CTM) et doivent être enveloppées dans des paires startTransform() / stopTransform() pour isoler leurs effets.
Toutes les méthodes retournent static, permettant le chaînage.
Référence rapide
| Méthode | Effet |
|---|---|
startTransform() | Sauvegarder l'état graphique (push CTM) |
stopTransform() | Restaurer l'état graphique (pop CTM) |
rotate() | Rotation autour d'un point |
scale() | Échelle horizontale et verticale |
translate() | Déplacer l'origine des coordonnées |
skew() | Cisaillement selon les axes X et Y |
mirrorH() | Miroir horizontal |
mirrorV() | Miroir vertical |
mirrorP() | Miroir autour d'un point |
mirrorL() | Miroir autour d'une ligne arbitraire |
Exemple de base
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
// Texte tourné
->startTransform()
->rotate(45, 105, 60)
->text(100, 55, 'Tourné 45°')
->stopTransform()
// Rectangle à l'échelle
->startTransform()
->scale(150, 150, 50, 150)
->rect(40, 140, 20, 20, 'DF')
->stopTransform()
// Texte en miroir
->startTransform()
->mirrorH(105)
->text(100, 200, 'Miroir')
->stopTransform();WARNING
Enveloppez toujours les transformations dans des paires startTransform() / stopTransform(). Oublier stopTransform() laisse l'état graphique modifié pour toutes les opérations suivantes.
startTransform / stopTransform
$pdf->startTransform(); // Push état graphique courant
// ... opérations de dessin avec transformations ...
$pdf->stopTransform(); // Pop et restaurer état précédentCes appels peuvent être imbriqués. Chaque startTransform() pousse un nouvel état sur la pile.
rotate()
$pdf->rotate(float $angle, float $x = '', float $y = '');Fait tourner le contenu suivant de $angle degrés dans le sens anti-horaire autour du point (x, y). Si x et y sont omis, la position courante est utilisée.
scale()
$pdf->scale(float $sx, float $sy, float $x = '', float $y = '');Met à l'échelle le contenu de $sx pourcent horizontalement et $sy pourcent verticalement, relativement au point (x, y). Une valeur de 100 signifie aucun changement ; 200 double la taille.
translate()
$pdf->translate(float $tx, float $ty);Décale l'origine des coordonnées de $tx horizontalement et $ty verticalement. Toutes les coordonnées suivantes sont décalées de cette quantité jusqu'à l'arrêt de la transformation.
skew()
$pdf->skew(float $angleX, float $angleY, float $x = '', float $y = '');Applique une transformation de cisaillement. $angleX incline selon l'axe X et $angleY selon l'axe Y, tous deux en degrés.
Méthodes de miroir
$pdf->mirrorH(float $x = ''); // Miroir horizontal autour axe vertical à x
$pdf->mirrorV(float $y = ''); // Miroir vertical autour axe horizontal à y
$pdf->mirrorP(float $x = '', float $y = ''); // Miroir autour d'un point
$pdf->mirrorL(float $angle, float $x = '', float $y = ''); // Miroir autour ligne passant par (x, y) à angle$pdf->startTransform()
->mirrorH(105)
->setFont('Helvetica', '', 14)
->text(80, 50, 'Retourné horizontalement')
->stopTransform();Combinaison de transformations
Plusieurs transformations peuvent être empilées dans un seul bloc. Elles sont appliquées dans l'ordre d'appel.
$pdf->startTransform()
->translate(20, 20)
->rotate(30)
->scale(120, 120)
->rect(10, 10, 40, 20, 'DF')
->stopTransform();Support CTM complet
Pour les cas d'usage avancés, la Matrice de Transformation Courante sous-jacente est entièrement accessible. La matrice à six éléments [a, b, c, d, e, f] correspond à la matrice de transformation PDF standard, donnant un contrôle complet sur les transformations affines lorsque les méthodes de commodité ne suffisent pas.