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).
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érie | Méthodes |
|---|---|
| ISO A | A0(), A1(), A2(), A3(), A4(), A5(), A6() |
| ISO B | B0(), B1(), B2(), B3(), B4(), B5() |
| Nord-américain | Letter(), Legal(), Tabloid() |
Margin
Définit les marges de page en millimètres.
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.
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
Gère les définitions d'unités et conversions entre points, millimètres, centimètres et pouces.
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 = 1inRéférence de conversion
| Depuis | Vers points |
|---|---|
| 1 pt | 1.0 |
| 1 mm | 2.8346 |
| 1 cm | 28.3465 |
| 1 in | 72.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.
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
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.