Skip to content

Transformaciones (HasTransforms)

El trait HasTransforms proporciona transformaciones geométricas que modifican cómo se renderizan las operaciones de dibujo posteriores. Las transformaciones operan sobre la Matriz de Transformación Actual (CTM) y deben estar envueltas en pares startTransform() / stopTransform() para aislar sus efectos.

Todos los métodos retornan static, por lo que cada llamada puede ser encadenada.

Referencia rápida

MétodoEfecto
startTransform()Guardar estado gráfico (push CTM)
stopTransform()Restaurar estado gráfico (pop CTM)
rotate()Rotar alrededor de un punto
scale()Escalar horizontal y verticalmente
translate()Mover el origen de coordenadas
skew()Sesgar a lo largo de los ejes X e Y
mirrorH()Reflejar horizontalmente
mirrorV()Reflejar verticalmente
mirrorP()Reflejar sobre un punto
mirrorL()Reflejar sobre una línea arbitraria

Ejemplo básico

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)

    // Texto rotado
    ->startTransform()
    ->rotate(45, 105, 60)
    ->text(100, 55, 'Rotated 45°')
    ->stopTransform()

    // Rectángulo escalado
    ->startTransform()
    ->scale(150, 150, 50, 150)
    ->rect(40, 140, 20, 20, 'DF')
    ->stopTransform()

    // Texto reflejado
    ->startTransform()
    ->mirrorH(105)
    ->text(100, 200, 'Mirrored')
    ->stopTransform();

WARNING

Siempre envuelve las transformaciones en pares startTransform() / stopTransform(). Olvidar stopTransform() deja el estado gráfico modificado para todas las operaciones posteriores.

startTransform / stopTransform

php
$pdf->startTransform();  // Push del estado gráfico actual
// ... operaciones de dibujo con transformaciones ...
$pdf->stopTransform();   // Pop y restaurar estado anterior

Estas llamadas pueden anidarse. Cada startTransform() empuja un nuevo estado a la pila.

rotate()

php
$pdf->rotate(float $angle, float $x = '', float $y = '');

Rota el contenido posterior $angle grados en sentido antihorario alrededor del punto (x, y). Si x e y se omiten, se usa la posición actual.

scale()

php
$pdf->scale(float $sx, float $sy, float $x = '', float $y = '');

Escala el contenido $sx por ciento horizontal y $sy por ciento verticalmente, relativo al punto (x, y). Un valor de 100 significa sin cambio; 200 duplica el tamaño.

translate()

php
$pdf->translate(float $tx, float $ty);

Desplaza el origen de coordenadas $tx horizontalmente y $ty verticalmente. Todas las coordenadas posteriores se desplazan por esta cantidad hasta que la transformación se detenga.

skew()

php
$pdf->skew(float $angleX, float $angleY, float $x = '', float $y = '');

Aplica una transformación de sesgo. $angleX sesga a lo largo del eje X y $angleY a lo largo del eje Y, ambos en grados.

Métodos de reflejo

php
$pdf->mirrorH(float $x = '');                              // Reflejo horizontal sobre eje vertical en x
$pdf->mirrorV(float $y = '');                              // Reflejo vertical sobre eje horizontal en y
$pdf->mirrorP(float $x = '', float $y = '');               // Reflejo sobre un punto
$pdf->mirrorL(float $angle, float $x = '', float $y = ''); // Reflejo sobre una línea a través de (x, y) con ángulo
php
$pdf->startTransform()
    ->mirrorH(105)
    ->setFont('Helvetica', '', 14)
    ->text(80, 50, 'Flipped horizontally')
    ->stopTransform();

Combinar transformaciones

Se pueden apilar múltiples transformaciones dentro de un solo bloque. Se aplican en el orden en que se llaman.

php
$pdf->startTransform()
    ->translate(20, 20)
    ->rotate(30)
    ->scale(120, 120)
    ->rect(10, 10, 40, 20, 'DF')
    ->stopTransform();

Soporte completo de CTM

Para casos de uso avanzados, la Matriz de Transformación Actual subyacente es completamente accesible. La matriz de seis elementos [a, b, c, d, e, f] se mapea a la matriz de transformación PDF estándar, dando control completo sobre las transformaciones afines cuando los métodos de conveniencia no son suficientes.

Distribuido bajo la licencia LGPL-3.0-or-later.