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은 크기를 두 배로 합니다.

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 라이선스로 배포됩니다.