Трансформации (HasTransforms)
Trait HasTransforms предоставляет геометрические трансформации, изменяющие способ рендеринга последующих операций рисования. Трансформации работают с текущей матрицей трансформации (CTM) и должны быть обёрнуты в пары startTransform() / stopTransform() для изоляции их эффектов.
Все методы возвращают static, поэтому каждый вызов может быть объединён в цепочку.
Краткий справочник
| Метод | Эффект |
|---|---|
startTransform() | Сохранить состояние графики (push CTM) |
stopTransform() | Восстановить состояние графики (pop CTM) |
rotate() | Поворот вокруг точки |
scale() | Масштабирование по горизонтали и вертикали |
translate() | Перемещение начала координат |
skew() | Наклон по осям X и Y |
mirrorH() | Горизонтальное отражение |
mirrorV() | Вертикальное отражение |
mirrorP() | Отражение относительно точки |
mirrorL() | Отражение относительно произвольной линии |
Базовый пример
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
$pdf->startTransform(); // Сохранить текущее состояние графики
// ... операции рисования с трансформациями ...
$pdf->stopTransform(); // Извлечь и восстановить предыдущее состояниеЭти вызовы могут быть вложенными. Каждый startTransform() помещает новое состояние в стек.
rotate()
$pdf->rotate(float $angle, float $x = '', float $y = '');Поворачивает последующий контент на $angle градусов против часовой стрелки вокруг точки (x, y). Если x и y опущены, используется текущая позиция.
scale()
$pdf->scale(float $sx, float $sy, float $x = '', float $y = '');Масштабирует контент на $sx процентов по горизонтали и $sy процентов по вертикали относительно точки (x, y). Значение 100 означает без изменений; 200 удваивает размер.
translate()
$pdf->translate(float $tx, float $ty);Сдвигает начало координат на $tx по горизонтали и $ty по вертикали. Все последующие координаты смещаются на эту величину до остановки трансформации.
skew()
$pdf->skew(float $angleX, float $angleY, float $x = '', float $y = '');Применяет наклонную трансформацию. $angleX наклоняет по оси X, а $angleY по оси Y, оба в градусах.
Методы отражения
$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) под углом$pdf->startTransform()
->mirrorH(105)
->setFont('Helvetica', '', 14)
->text(80, 50, 'Flipped horizontally')
->stopTransform();Комбинирование трансформаций
Несколько трансформаций могут быть накоплены в одном блоке. Они применяются в порядке вызова.
$pdf->startTransform()
->translate(20, 20)
->rotate(30)
->scale(120, 120)
->rect(10, 10, 40, 20, 'DF')
->stopTransform();Полная поддержка CTM
Для продвинутых сценариев базовая текущая матрица трансформации полностью доступна. Шестиэлементная матрица [a, b, c, d, e, f] соответствует стандартной матрице трансформации PDF, обеспечивая полный контроль над аффинными трансформациями, когда удобных методов недостаточно.