Skip to content

Value Objects

TCPDF-Next usa value objects inmutables para todos los datos geométricos y cromáticos. Cada value object se declara final readonly — una vez creado, no puede ser modificado. Crea nuevas instancias en lugar de mutar las existentes.

PageSize

Representa las dimensiones de una página en puntos (1 pt = 1/72 pulgada).

php
use Yeeefang\TcpdfNext\ValueObjects\PageSize;

// Serie A ISO 216
$a4 = PageSize::A4();             // 595.28 x 841.89 pt

// Cambio de orientación (retorna una nueva instancia)
$landscape = PageSize::A4()->landscape();   // 841.89 x 595.28 pt
$portrait = PageSize::A4()->portrait();     // 595.28 x 841.89 pt

// Desde nombre en cadena
$letter = PageSize::fromName('Letter');

// Tamaño personalizado en puntos
$custom = new PageSize(400.0, 600.0, 'custom');

Métodos factory

SerieMétodos
ISO AA0(), A1(), A2(), A3(), A4(), A5(), A6()
ISO BB0(), B1(), B2(), B3(), B4(), B5()
NorteamericanosLetter(), Legal(), Tabloid()

Margin

Define los márgenes de la página en milímetros.

php
use Yeeefang\TcpdfNext\ValueObjects\Margin;

// Mismo valor en los cuatro lados
$uniform = Margin::uniform(10.0);               // 10mm en todos los lados

// Simétrico: vertical y horizontal
$symmetric = Margin::symmetric(15.0, 10.0);     // 15mm arriba/abajo, 10mm izquierda/derecha

// Sin márgenes
$zero = Margin::zero();

// Explícito: superior, derecho, inferior, izquierdo
$explicit = new Margin(20.0, 15.0, 25.0, 15.0);

Accede a los lados individuales a través de propiedades públicas readonly: $margin->top, $margin->right, $margin->bottom, $margin->left.

Position y Dimension

Pares simples de coordenadas y tamaño con propiedades públicas 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

Maneja definiciones de unidades y conversiones entre puntos, milímetros, centímetros y pulgadas.

php
use Yeeefang\TcpdfNext\ValueObjects\Unit;

$mm = Unit::mm();  // También: Unit::pt(), Unit::cm(), Unit::in()

// Convertir entre unidades
$points = Unit::convert(25.4, Unit::mm(), Unit::pt());   // 25.4mm = 72pt
$inches = Unit::convert(72.0, Unit::pt(), Unit::in());   // 72pt = 1in

Referencia de conversión

DesdeA puntos
1 pt1.0
1 mm2.8346
1 cm28.3465
1 in72.0

Color

La clase Color reside en el namespace Graphics y soporta modelos de color RGB, CMYK, escala de grises y spot. Como todos los value objects, es inmutable.

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

// Escala de grises (0-255, donde 0 = negro, 255 = blanco)
$gray = Color::gray(128);

// Color spot (nombre + respaldo CMYK)
$pantone = Color::spot('Pantone 151 C', 0, 60, 100, 0);

Poniendo todo junto

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

Todos los value objects son final readonly. Métodos como landscape() y portrait() retornan nuevas instancias — nunca mutan el original. Esto hace que los value objects sean seguros para compartir entre páginas, hilos y límites de funciones sin necesidad de copias defensivas.

Distribuido bajo la licencia LGPL-3.0-or-later.