Skip to content

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éthodeEffet
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

php
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

php
$pdf->startTransform();  // Push état graphique courant
// ... opérations de dessin avec transformations ...
$pdf->stopTransform();   // Pop et restaurer état précédent

Ces appels peuvent être imbriqués. Chaque startTransform() pousse un nouvel état sur la pile.

rotate()

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

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

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

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

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

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

Distribué sous licence LGPL-3.0-or-later.