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.
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 :
| Code | Style |
|---|---|
'' | 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é.
$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.
$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.
$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.
$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.
$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é.
| Mode | Valeur | Effet |
|---|---|---|
| Fill | 0 | Texte rempli normal (par défaut) |
| Stroke | 1 | Contour uniquement |
| FillStroke | 2 | Rempli avec contour |
| Invisible | 3 | Caché mais sélectionnable/recherchable |
| FillClip | 4 | Remplir, puis ajouter au chemin de découpe |
| StrokeClip | 5 | Tracer, puis ajouter au chemin de découpe |
| FillStrokeClip | 6 | Remplir + tracer, puis découper |
| Clip | 7 | Ajouter au chemin de découpe uniquement |
$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.
$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 à noirQuand appelée avec un seul argument, elle définit une valeur de niveau de gris (0 = noir, 255 = blanc).
$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.
$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
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');