Skip to content

Объекты значений

TCPDF-Next использует неизменяемые объекты значений для всех геометрических и хроматических данных. Каждый объект значений объявлен как final readonly — после создания его нельзя изменить. Создавайте новые экземпляры вместо модификации существующих.

PageSize

Представляет размеры страницы в пунктах (1 pt = 1/72 дюйма).

php
use Yeeefang\TcpdfNext\ValueObjects\PageSize;

// Серия ISO 216 A
$a4 = PageSize::A4();             // 595.28 x 841.89 pt

// Переключение ориентации (возвращает новый экземпляр)
$landscape = PageSize::A4()->landscape();   // 841.89 x 595.28 pt
$portrait = PageSize::A4()->portrait();     // 595.28 x 841.89 pt

// Из строки с названием
$letter = PageSize::fromName('Letter');

// Пользовательский размер в пунктах
$custom = new PageSize(400.0, 600.0, 'custom');

Фабричные методы

СерияМетоды
ISO AA0(), A1(), A2(), A3(), A4(), A5(), A6()
ISO BB0(), B1(), B2(), B3(), B4(), B5()
СевероамериканскиеLetter(), Legal(), Tabloid()

Margin

Определяет поля страницы в миллиметрах.

php
use Yeeefang\TcpdfNext\ValueObjects\Margin;

// Одинаковое значение со всех четырёх сторон
$uniform = Margin::uniform(10.0);               // 10мм со всех сторон

// Симметрично: вертикально и горизонтально
$symmetric = Margin::symmetric(15.0, 10.0);     // 15мм верх/низ, 10мм лево/право

// Без полей
$zero = Margin::zero();

// Явно: верх, право, низ, лево
$explicit = new Margin(20.0, 15.0, 25.0, 15.0);

Доступ к отдельным сторонам через публичные readonly-свойства: $margin->top, $margin->right, $margin->bottom, $margin->left.

Position и Dimension

Простые пары координат и размеров с публичными 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

Обрабатывает определения единиц и преобразования между пунктами, миллиметрами, сантиметрами и дюймами.

php
use Yeeefang\TcpdfNext\ValueObjects\Unit;

$mm = Unit::mm();  // Также: Unit::pt(), Unit::cm(), Unit::in()

// Преобразование между единицами
$points = Unit::convert(25.4, Unit::mm(), Unit::pt());   // 25.4мм = 72pt
$inches = Unit::convert(72.0, Unit::pt(), Unit::in());   // 72pt = 1in

Справочник преобразований

ИзВ пунктах
1 pt1.0
1 мм2.8346
1 см28.3465
1 дюйм72.0

Color

Класс Color находится в пространстве имён Graphics и поддерживает цветовые модели RGB, CMYK, оттенков серого и плашечных цветов. Как и все объекты значений, он неизменяем.

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

// Оттенок серого (0-255, где 0 = чёрный, 255 = белый)
$gray = Color::gray(128);

// Плашечный цвет (имя + CMYK-запасной вариант)
$pantone = Color::spot('Pantone 151 C', 0, 60, 100, 0);

Собираем всё вместе

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');

Все объекты значений являются final readonly. Методы вроде landscape() и portrait() возвращают новые экземпляры — они никогда не мутируют оригинал. Это делает объекты значений безопасными для совместного использования между страницами, потоками и границами функций без защитного копирования.

Распространяется по лицензии LGPL-3.0-or-later.