Value Object
TCPDF-Next dùng value object bất biến cho mọi dữ liệu hình học và màu sắc. Mọi value object được khai báo final readonly — một khi tạo xong, không thể sửa đổi. Tạo instance mới thay vì thay đổi instance hiện có.
PageSize
Biểu diễn kích thước trang tính bằng point (1 pt = 1/72 inch).
use Yeeefang\TcpdfNext\ValueObjects\PageSize;
// ISO 216 A series
$a4 = PageSize::A4(); // 595.28 x 841.89 pt
// Chuyển hướng trang (trả về instance mới)
$landscape = PageSize::A4()->landscape(); // 841.89 x 595.28 pt
$portrait = PageSize::A4()->portrait(); // 595.28 x 841.89 pt
// Từ tên chuỗi
$letter = PageSize::fromName('Letter');
// Kích thước tùy chỉnh tính bằng point
$custom = new PageSize(400.0, 600.0, 'custom');Factory Method
| Series | Method |
|---|---|
| ISO A | A0(), A1(), A2(), A3(), A4(), A5(), A6() |
| ISO B | B0(), B1(), B2(), B3(), B4(), B5() |
| Bắc Mỹ | Letter(), Legal(), Tabloid() |
Margin
Định nghĩa margin trang tính bằng millimeter.
use Yeeefang\TcpdfNext\ValueObjects\Margin;
// Cùng giá trị bốn cạnh
$uniform = Margin::uniform(10.0); // 10mm tất cả cạnh
// Đối xứng: dọc và ngang
$symmetric = Margin::symmetric(15.0, 10.0); // 15mm trên/dưới, 10mm trái/phải
// Không margin
$zero = Margin::zero();
// Chỉ định rõ: trên, phải, dưới, trái
$explicit = new Margin(20.0, 15.0, 25.0, 15.0);Truy cập từng cạnh qua thuộc tính public readonly: $margin->top, $margin->right, $margin->bottom, $margin->left.
Position và Dimension
Cặp tọa độ và kích thước đơn giản với thuộc tính public readonly.
use Yeeefang\TcpdfNext\ValueObjects\{Position, Dimension};
$pos = new Position(50.0, 100.0); // $pos->x, $pos->y
$dim = new Dimension(210.0, 297.0); // $dim->width, $dim->heightUnit
Xử lý định nghĩa đơn vị và chuyển đổi giữa point, millimeter, centimeter và inch.
use Yeeefang\TcpdfNext\ValueObjects\Unit;
$mm = Unit::mm(); // Cũng có: Unit::pt(), Unit::cm(), Unit::in()
// Chuyển đổi giữa đơn vị
$points = Unit::convert(25.4, Unit::mm(), Unit::pt()); // 25.4mm = 72pt
$inches = Unit::convert(72.0, Unit::pt(), Unit::in()); // 72pt = 1inBảng chuyển đổi
| Từ | Sang Point |
|---|---|
| 1 pt | 1.0 |
| 1 mm | 2.8346 |
| 1 cm | 28.3465 |
| 1 in | 72.0 |
Color
Class Color nằm trong namespace Graphics và hỗ trợ mô hình màu RGB, CMYK, grayscale và spot color. Giống mọi value object, nó bất biến.
use Yeeefang\TcpdfNext\Graphics\Color;
// RGB (0-255)
$red = Color::rgb(255, 0, 0);
$orange = Color::rgb(255, 102, 0);
// CMYK (0-100)
$processBlack = Color::cmyk(0, 0, 0, 100);
$cyan = Color::cmyk(100, 0, 0, 0);
// Grayscale (0-255, 0 = đen, 255 = trắng)
$gray = Color::gray(128);
// Spot color (tên + CMYK fallback)
$pantone = Color::spot('Pantone 151 C', 0, 60, 100, 0);Kết hợp tất cả
use Yeeefang\TcpdfNext\Core\Document;
use Yeeefang\TcpdfNext\ValueObjects\{PageSize, Margin, Unit};
use Yeeefang\TcpdfNext\Graphics\Color;
$landscape = PageSize::A4()->landscape();
$margins = Margin::symmetric(15.0, 10.0);
$orange = Color::rgb(255, 102, 0);
$pdf = Document::create()
->addPage($landscape, margin: $margins)
->setFont('Helvetica', '', 12)
->setTextColor($orange)
->cell(0, 10, 'Styled with value objects')
->save('styled.pdf');Mọi value object là final readonly. Method như landscape() và portrait() trả về instance mới — chúng không bao giờ thay đổi bản gốc. Điều này làm value object an toàn khi chia sẻ giữa các trang, thread và ranh giới hàm mà không cần sao chép phòng thủ.