Skip to content

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).

php
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

SeriesMethod
ISO AA0(), A1(), A2(), A3(), A4(), A5(), A6()
ISO BB0(), B1(), B2(), B3(), B4(), B5()
Bắc MỹLetter(), Legal(), Tabloid()

Margin

Định nghĩa margin trang tính bằng millimeter.

php
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.

php
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->height

Unit

Xử lý định nghĩa đơn vị và chuyển đổi giữa point, millimeter, centimeter và inch.

php
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 = 1in

Bảng chuyển đổi

TừSang Point
1 pt1.0
1 mm2.8346
1 cm28.3465
1 in72.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.

php
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ả

php
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()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ủ.

Phân phối theo giấy phép LGPL-3.0-or-later.