Skip to content

Transformações (HasTransforms)

O trait HasTransforms fornece transformações geométricas que modificam como operações de desenho subsequentes são renderizadas. As transformações operam na Current Transformation Matrix (CTM) e devem ser envolvidas em pares startTransform() / stopTransform() para isolar seus efeitos.

Todos os métodos retornam static, então cada chamada pode ser encadeada.

Referência Rápida

MétodoEfeito
startTransform()Salvar estado gráfico (push CTM)
stopTransform()Restaurar estado gráfico (pop CTM)
rotate()Rotacionar ao redor de um ponto
scale()Escalar horizontal e verticalmente
translate()Mover a origem das coordenadas
skew()Inclinar ao longo dos eixos X e Y
mirrorH()Espelhar horizontalmente
mirrorV()Espelhar verticalmente
mirrorP()Espelhar em torno de um ponto
mirrorL()Espelhar em torno de uma linha arbitrária

Exemplo Básico

php
use Yeeefang\TcpdfNext\Core\Document;

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

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

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

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

WARNING

Sempre envolva transformações em pares startTransform() / stopTransform(). Esquecer stopTransform() deixa o estado gráfico modificado para todas as operações subsequentes.

startTransform / stopTransform

php
$pdf->startTransform();  // Push do estado gráfico atual
// ... operações de desenho com transformações ...
$pdf->stopTransform();   // Pop e restaurar estado anterior

Essas chamadas podem ser aninhadas. Cada startTransform() empilha um novo estado na pilha.

rotate()

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

Rotaciona conteúdo subsequente em $angle graus no sentido anti-horário ao redor do ponto (x, y). Se x e y forem omitidos, a posição atual é usada.

scale()

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

Escala conteúdo em $sx por cento horizontalmente e $sy por cento verticalmente, relativo ao ponto (x, y). Um valor de 100 significa sem alteração; 200 dobra o tamanho.

translate()

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

Desloca a origem das coordenadas em $tx horizontalmente e $ty verticalmente. Todas as coordenadas subsequentes são deslocadas por essa quantidade até a transformação ser parada.

skew()

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

Aplica uma transformação de inclinação. $angleX inclina ao longo do eixo X e $angleY ao longo do eixo Y, ambos em graus.

Métodos de Espelhamento

php
$pdf->mirrorH(float $x = '');                              // Espelhamento horizontal sobre eixo vertical em x
$pdf->mirrorV(float $y = '');                              // Espelhamento vertical sobre eixo horizontal em y
$pdf->mirrorP(float $x = '', float $y = '');               // Espelhamento sobre um ponto
$pdf->mirrorL(float $angle, float $x = '', float $y = ''); // Espelhamento sobre uma linha por (x, y) no ângulo
php
$pdf->startTransform()
    ->mirrorH(105)
    ->setFont('Helvetica', '', 14)
    ->text(80, 50, 'Flipped horizontally')
    ->stopTransform();

Combinando Transformações

Múltiplas transformações podem ser empilhadas dentro de um único bloco. São aplicadas na ordem de chamada.

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

Suporte Completo a CTM

Para casos de uso avançados, a Current Transformation Matrix subjacente é totalmente acessível. A matriz de seis elementos [a, b, c, d, e, f] mapeia para a matriz de transformação PDF padrão, dando controle completo sobre transformações afins quando os métodos de conveniência não são suficientes.

Distribuído sob a licença LGPL-3.0-or-later.