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étodo | Efeito |
|---|---|
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
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
$pdf->startTransform(); // Push do estado gráfico atual
// ... operações de desenho com transformações ...
$pdf->stopTransform(); // Pop e restaurar estado anteriorEssas chamadas podem ser aninhadas. Cada startTransform() empilha um novo estado na pilha.
rotate()
$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()
$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()
$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()
$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
$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$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.
$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.