Biến đổi (HasTransforms)
Trait HasTransforms cung cấp các biến đổi hình học thay đổi cách render thao tác vẽ tiếp theo. Biến đổi hoạt động trên Current Transformation Matrix (CTM) và phải được bọc trong cặp startTransform() / stopTransform() để cách ly hiệu ứng.
Mọi method trả về static, nên mỗi lệnh gọi có thể chain.
Tham chiếu nhanh
| Method | Hiệu ứng |
|---|---|
startTransform() | Lưu graphics state (push CTM) |
stopTransform() | Khôi phục graphics state (pop CTM) |
rotate() | Xoay quanh một điểm |
scale() | Scale ngang và dọc |
translate() | Di chuyển gốc tọa độ |
skew() | Nghiêng theo trục X và Y |
mirrorH() | Lật gương ngang |
mirrorV() | Lật gương dọc |
mirrorP() | Lật gương qua một điểm |
mirrorL() | Lật gương qua đường thẳng bất kỳ |
Ví dụ cơ bản
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
// Văn bản xoay
->startTransform()
->rotate(45, 105, 60)
->text(100, 55, 'Rotated 45°')
->stopTransform()
// Hình chữ nhật scale
->startTransform()
->scale(150, 150, 50, 150)
->rect(40, 140, 20, 20, 'DF')
->stopTransform()
// Văn bản lật gương
->startTransform()
->mirrorH(105)
->text(100, 200, 'Mirrored')
->stopTransform();WARNING
Luôn bọc biến đổi trong cặp startTransform() / stopTransform(). Quên stopTransform() sẽ để graphics state bị sửa đổi cho mọi thao tác tiếp theo.
startTransform / stopTransform
$pdf->startTransform(); // Push graphics state hiện tại
// ... thao tác vẽ với biến đổi ...
$pdf->stopTransform(); // Pop và khôi phục state trướcCác lệnh gọi này có thể lồng nhau. Mỗi startTransform() push state mới lên stack.
rotate()
$pdf->rotate(float $angle, float $x = '', float $y = '');Xoay nội dung tiếp theo $angle độ ngược chiều kim đồng hồ quanh điểm (x, y). Nếu bỏ qua x và y, vị trí hiện tại được dùng.
scale()
$pdf->scale(float $sx, float $sy, float $x = '', float $y = '');Scale nội dung $sx phần trăm ngang và $sy phần trăm dọc, tương đối với điểm (x, y). Giá trị 100 là không đổi; 200 gấp đôi kích thước.
translate()
$pdf->translate(float $tx, float $ty);Dịch gốc tọa độ $tx ngang và $ty dọc. Mọi tọa độ tiếp theo được offset bằng lượng này cho đến khi transform dừng.
skew()
$pdf->skew(float $angleX, float $angleY, float $x = '', float $y = '');Áp dụng biến đổi nghiêng. $angleX nghiêng theo trục X và $angleY theo trục Y, cả hai tính bằng độ.
Method lật gương
$pdf->mirrorH(float $x = ''); // Lật gương ngang qua trục dọc tại x
$pdf->mirrorV(float $y = ''); // Lật gương dọc qua trục ngang tại y
$pdf->mirrorP(float $x = '', float $y = ''); // Lật gương qua một điểm
$pdf->mirrorL(float $angle, float $x = '', float $y = ''); // Lật gương qua đường thẳng qua (x, y) tại góc$pdf->startTransform()
->mirrorH(105)
->setFont('Helvetica', '', 14)
->text(80, 50, 'Flipped horizontally')
->stopTransform();Kết hợp biến đổi
Nhiều biến đổi có thể xếp chồng trong một block. Chúng được áp dụng theo thứ tự gọi.
$pdf->startTransform()
->translate(20, 20)
->rotate(30)
->scale(120, 120)
->rect(10, 10, 40, 20, 'DF')
->stopTransform();Hỗ trợ CTM đầy đủ
Cho trường hợp nâng cao, Current Transformation Matrix nền có thể truy cập đầy đủ. Ma trận sáu phần tử [a, b, c, d, e, f] ánh xạ sang ma trận biến đổi PDF chuẩn, cho kiểm soát hoàn toàn biến đổi affine khi method tiện ích không đủ.