Skip to content

Value Objects

TCPDF-Next utilise des value objects immuables pour toutes les données géométriques et chromatiques. Chaque value object est déclaré final readonly — une fois créé, il ne peut être modifié. Créez de nouvelles instances au lieu de muter celles existantes.

PageSize

Représente les dimensions d'une page en points (1 pt = 1/72 pouce).

php
use Yeeefang\TcpdfNext\ValueObjects\PageSize;

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

// Changement d'orientation (retourne une nouvelle instance)
$landscape = PageSize::A4()->landscape();   // 841.89 x 595.28 pt
$portrait = PageSize::A4()->portrait();     // 595.28 x 841.89 pt

// Depuis nom de chaîne
$letter = PageSize::fromName('Letter');

// Taille personnalisée en points
$custom = new PageSize(400.0, 600.0, 'custom');

Méthodes factory

SérieMéthodes
ISO AA0(), A1(), A2(), A3(), A4(), A5(), A6()
ISO BB0(), B1(), B2(), B3(), B4(), B5()
Nord-américainLetter(), Legal(), Tabloid()

Margin

Définit les marges de page en millimètres.

php
use Yeeefang\TcpdfNext\ValueObjects\Margin;

// Même valeur sur les quatre côtés
$uniform = Margin::uniform(10.0);               // 10mm tous côtés

// Symétrique : vertical et horizontal
$symmetric = Margin::symmetric(15.0, 10.0);     // 15mm haut/bas, 10mm gauche/droite

// Pas de marges
$zero = Margin::zero();

// Explicite : haut, droite, bas, gauche
$explicit = new Margin(20.0, 15.0, 25.0, 15.0);

Accès aux côtés individuels via propriétés publiques readonly : $margin->top, $margin->right, $margin->bottom, $margin->left.

Position et Dimension

Paires simples de coordonnées et tailles avec propriétés publiques 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

Gère les définitions d'unités et conversions entre points, millimètres, centimètres et pouces.

php
use Yeeefang\TcpdfNext\ValueObjects\Unit;

$mm = Unit::mm();  // Aussi : Unit::pt(), Unit::cm(), Unit::in()

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

Référence de conversion

DepuisVers points
1 pt1.0
1 mm2.8346
1 cm28.3465
1 in72.0

Color

La classe Color vit dans le namespace Graphics et supporte les modèles de couleur RGB, CMYK, niveaux de gris et couleurs spot. Comme tous les value objects, elle est immuable.

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

// Niveaux de gris (0-255, où 0 = noir, 255 = blanc)
$gray = Color::gray(128);

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

Tout assembler

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, 'Stylisé avec des value objects')
    ->save('styled.pdf');

Tous les value objects sont final readonly. Les méthodes comme landscape() et portrait() retournent de nouvelles instances — elles ne mutent jamais l'original. Cela rend les value objects sûrs à partager entre pages, threads et limites de fonction sans copie défensive.

Distribué sous licence LGPL-3.0-or-later.