Skip to content

Typographie (HasTypography)

Le trait HasTypography contrôle l'apparence visuelle du texte : famille de police, style, taille, espacement, étirement, couleur, ombre et mode de rendu. Toutes les méthodes retournent static pour chaînage fluide.

Définir les polices

setFont()

Définissez la famille de police actuelle, le style et la taille en un seul appel.

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()
    ->setFont('Helvetica', '', 12)
    ->cell(0, 10, 'Normal text', newLine: true)
    ->setFont('Helvetica', 'B', 14)
    ->cell(0, 10, 'Bold text', newLine: true)
    ->setFont('Helvetica', 'BI', 16)
    ->cell(0, 10, 'Bold Italic text', newLine: true);

Styles de police

Combinez des caractères de style pour appliquer plusieurs effets :

CodeStyle
''Regular
'B'Bold
'I'Italic
'BI'Bold Italic
'U'Underline
'D'Strikethrough
'O'Overline

Les styles peuvent être combinés librement : 'BIU' produit du texte gras, italique, souligné.

php
$pdf->setFont('Helvetica', 'BU', 12)
    ->cell(0, 10, 'Bold + Underline', newLine: true)
    ->setFont('Helvetica', 'ID', 12)
    ->cell(0, 10, 'Italic + Strikethrough', newLine: true)
    ->setFont('Helvetica', 'BO', 12)
    ->cell(0, 10, 'Bold + Overline', newLine: true);

setFontSize()

Changez la taille de police sans changer la famille ou le style.

php
$pdf->setFont('Helvetica', 'B', 12)
    ->cell(0, 10, '12pt heading', newLine: true)
    ->setFontSize(10)
    ->cell(0, 10, '10pt body text', newLine: true)
    ->setFontSize(8)
    ->cell(0, 10, '8pt footnote', newLine: true);

Espacement et étirement

setFontSpacing()

Ajuste l'espace supplémentaire (en points) inséré entre chaque paire de caractères.

php
$pdf->setFont('Helvetica', '', 12)
    ->setFontSpacing(0)
    ->cell(0, 10, 'Normal spacing', newLine: true)
    ->setFontSpacing(1.5)
    ->cell(0, 10, 'Expanded spacing', newLine: true)
    ->setFontSpacing(-0.5)
    ->cell(0, 10, 'Tight spacing', newLine: true)
    ->setFontSpacing(0);

setFontStretching()

Applique une mise à l'échelle horizontale aux glyphes. Une valeur de 100 est la largeur normale.

php
$pdf->setFont('Helvetica', '', 14)
    ->setFontStretching(100)
    ->cell(0, 10, 'Normal width (100%)', newLine: true)
    ->setFontStretching(130)
    ->cell(0, 10, 'Stretched (130%)', newLine: true)
    ->setFontStretching(75)
    ->cell(0, 10, 'Condensed (75%)', newLine: true)
    ->setFontStretching(100);

Mesurer le texte

getStringWidth()

Retourne la largeur (en unités utilisateur) d'une chaîne rendue dans la police et taille actuelles. Utile pour calculer la mise en page avant le dessin.

php
$pdf->setFont('Helvetica', '', 12);
$width = $pdf->getStringWidth('Invoice Total: $1,250.00');

// Utiliser la largeur mesurée pour aligner une cellule à droite
$pageWidth = $pdf->getPageWidth();
$rightMargin = $pdf->getRightMargin();
$pdf->setX($pageWidth - $rightMargin - $width)
    ->cell($width, 10, 'Invoice Total: $1,250.00');

Modes de rendu de texte

PDF définit 8 modes de rendu de texte via l'enum TextRenderer. Ceux-ci contrôlent si le texte est rempli, tracé, utilisé comme chemin de découpe ou caché.

ModeValeurEffet
Fill0Texte rempli normal (par défaut)
Stroke1Contour uniquement
FillStroke2Rempli avec contour
Invisible3Caché mais sélectionnable/recherchable
FillClip4Remplir, puis ajouter au chemin de découpe
StrokeClip5Tracer, puis ajouter au chemin de découpe
FillStrokeClip6Remplir + tracer, puis découper
Clip7Ajouter au chemin de découpe uniquement
php
$pdf->setFont('Helvetica', 'B', 36)
    ->setTextRenderingMode(0)
    ->cell(0, 15, 'Filled text', newLine: true)
    ->setTextRenderingMode(1)
    ->cell(0, 15, 'Outlined text', newLine: true)
    ->setTextRenderingMode(2)
    ->cell(0, 15, 'Fill + Stroke', newLine: true)
    ->setTextRenderingMode(3)
    ->cell(0, 15, 'Invisible (but searchable)', newLine: true)
    ->setTextRenderingMode(0);

Le mode Invisible (3) est particulièrement utile pour les superpositions OCR — vous placez le texte reconnu au-dessus d'une image scannée pour que le PDF soit recherchable pendant que l'image reste visible.

Couleur de texte

setTextColor()

Définissez la couleur de texte en utilisant les valeurs RGB.

php
$pdf->setTextColor(0, 0, 0)          // Noir
    ->cell(0, 10, 'Black text', newLine: true)
    ->setTextColor(220, 50, 50)       // Rouge
    ->cell(0, 10, 'Red text', newLine: true)
    ->setTextColor(0, 102, 204)       // Bleu
    ->cell(0, 10, 'Blue text', newLine: true)
    ->setTextColor(0, 0, 0);          // Réinitialiser à noir

Quand appelée avec un seul argument, elle définit une valeur de niveau de gris (0 = noir, 255 = blanc).

php
$pdf->setTextColor(128)
    ->cell(0, 10, 'Gray text', newLine: true);

Ombre de texte

setTextShadow()

Appliquez un effet d'ombre sous le texte. L'ombre est définie comme un tableau associatif.

php
$pdf->setFont('Helvetica', 'B', 28)
    ->setTextShadow([
        'enabled'    => true,
        'depth_w'    => 0.4,    // Décalage horizontal (mm)
        'depth_h'    => 0.4,    // Décalage vertical (mm)
        'color'      => [180, 180, 180],
        'opacity'    => 0.5,
        'blend_mode' => 'Normal',
    ])
    ->cell(0, 15, 'Heading with Shadow', newLine: true)
    ->setTextShadow(['enabled' => false]);

Exemple complet

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->addPage()

    // Titre — large, gras, bleu
    ->setFont('Helvetica', 'B', 24)
    ->setTextColor(0, 51, 102)
    ->cell(0, 14, 'Monthly Report', newLine: true)

    // Sous-titre — regular, gris, avec espacement supplémentaire
    ->setFont('Helvetica', '', 12)
    ->setTextColor(100, 100, 100)
    ->setFontSpacing(1.0)
    ->cell(0, 10, 'February 2026', newLine: true)
    ->setFontSpacing(0)
    ->ln(5)

    // Corps de texte — noir, normal
    ->setFont('Times', '', 11)
    ->setTextColor(0, 0, 0)
    ->multiCell(0, 6, 'Revenue increased 12% compared to the previous quarter. Operating costs remained stable, and net margin improved by 3 percentage points.')
    ->ln(3)

    // Note de bas de page — petit, italique, gris
    ->setFont('Times', 'I', 8)
    ->setTextColor(150, 150, 150)
    ->cell(0, 5, '* All figures are unaudited.')

    ->save('report.pdf');

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