Skip to content

変換(HasTransforms)

HasTransforms トレイトは、後続の描画操作のレンダリング方法を変更する幾何学的変換を提供します。変換は現在の変換行列(CTM)に対して操作を行い、効果を分離するために startTransform() / stopTransform() のペアで囲む必要があります。

すべてのメソッドは static を返すため、すべての呼び出しをチェーンできます。

クイックリファレンス

メソッド効果
startTransform()グラフィックス状態を保存(CTMをプッシュ)
stopTransform()グラフィックス状態を復元(CTMをポップ)
rotate()点を中心に回転
scale()水平および垂直にスケール
translate()座標原点を移動
skew()X軸とY軸に沿って傾斜
mirrorH()水平に反転
mirrorV()垂直に反転
mirrorP()点を中心に反転
mirrorL()任意の線に対して反転

基本例

php
use Yeeefang\TcpdfNext\Core\Document;

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

    // 回転テキスト
    ->startTransform()
    ->rotate(45, 105, 60)
    ->text(100, 55, 'Rotated 45°')
    ->stopTransform()

    // スケールされた矩形
    ->startTransform()
    ->scale(150, 150, 50, 150)
    ->rect(40, 140, 20, 20, 'DF')
    ->stopTransform()

    // 反転テキスト
    ->startTransform()
    ->mirrorH(105)
    ->text(100, 200, 'Mirrored')
    ->stopTransform();

WARNING

変換は必ず startTransform() / stopTransform() のペアで囲んでください。stopTransform() を忘れると、グラフィックス状態が変更されたまま後続のすべての操作に影響します。

startTransform / stopTransform

php
$pdf->startTransform();  // 現在のグラフィックス状態をプッシュ
// ... 変換付きの描画操作 ...
$pdf->stopTransform();   // ポップして前の状態を復元

これらの呼び出しはネストできます。各 startTransform() は新しい状態をスタックにプッシュします。

rotate()

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

後続のコンテンツを点(x, y)を中心に $angle 度反時計回りに回転します。xとyを省略した場合、現在の位置が使用されます。

scale()

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

点(x, y)を基準に、コンテンツを水平方向に $sx パーセント、垂直方向に $sy パーセントでスケーリングします。100は変更なし、200はサイズを2倍にします。

translate()

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

座標原点を水平方向に $tx、垂直方向に $ty だけシフトします。変換が停止されるまで、後続のすべての座標がこの量だけオフセットされます。

skew()

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

せん断変換を適用します。$angleX はX軸に沿って、$angleY はY軸に沿って傾斜させます(度単位)。

反転メソッド

php
$pdf->mirrorH(float $x = '');                              // xの位置の垂直軸を中心に水平反転
$pdf->mirrorV(float $y = '');                              // yの位置の水平軸を中心に垂直反転
$pdf->mirrorP(float $x = '', float $y = '');               // 点を中心に反転
$pdf->mirrorL(float $angle, float $x = '', float $y = ''); // (x, y)を通る角度の線に対して反転
php
$pdf->startTransform()
    ->mirrorH(105)
    ->setFont('Helvetica', '', 14)
    ->text(80, 50, 'Flipped horizontally')
    ->stopTransform();

変換の組み合わせ

単一のブロック内で複数の変換をスタックできます。呼び出された順序で適用されます。

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

完全なCTMサポート

高度な用途には、基盤となる現在の変換行列に完全にアクセスできます。6要素の行列 [a, b, c, d, e, f] は標準のPDF変換行列にマッピングされ、便利メソッドでは不十分な場合にアフィン変換の完全な制御を提供します。

LGPL-3.0-or-later ライセンスの下で公開されています。