Sortie de texte (HasTextOutput)
Le trait HasTextOutput fournit les méthodes principales pour placer du texte sur une page. Chaque méthode sert un modèle de mise en page différent : cellules fixes, texte fluide, positionnement absolu et rendu HTML.
Référence rapide
| Méthode | Modèle de mise en page | Enroulement |
|---|---|---|
cell() | Boîte simple ligne | Non — le texte est coupé |
multiCell() | Bloc multi-lignes | Oui — s'enroule auto à la largeur de cellule |
text() | Position absolue | Non |
write() | Flux inline | Oui — coule comme un traitement de texte |
writeHtml() | Bloc HTML | Oui — mise en page HTML complète |
writeHtmlCell() | HTML dans cellule positionnée | Oui |
ln() | Saut de ligne | N/A |
Exemple basique
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Single line cell', newLine: true)
->multiCell(0, 10, 'This is a longer text that will automatically wrap to multiple lines when it reaches the edge of the printable area.')
->ln(5)
->text(50.0, 100.0, 'Absolute positioned text')
->write(10, 'Inline text that ')
->write(10, 'continues flowing.');Toutes les méthodes retournent static, donc chaque appel peut être chaîné.
cell()
Dessine une cellule rectangulaire simple ligne avec bordure, remplissage de fond, alignement et lien optionnels.
$pdf->cell(
float $w, // Largeur (0 = étendre jusqu'à marge droite)
float $h, // Hauteur
string $txt, // Contenu texte
mixed $border = 0, // 0, 1, ou combinaison 'LTRB'
bool $newLine = false,
string $align = '', // L, C, R, J
bool $fill = false,
mixed $link = '',
);Le curseur se déplace à droite de la cellule (ou à la ligne suivante quand $newLine est true).
Alignement
use Yeeefang\TcpdfNext\Contracts\Enums\Alignment;
$pdf->cell(0, 10, 'Left aligned')
->ln()
->cell(0, 10, 'Centered', align: 'C')
->ln()
->cell(0, 10, 'Right aligned', align: 'R')
->ln()
->cell(0, 10, 'Justified text in a cell', align: 'J');Bordures
// Pas de bordure
$pdf->cell(60, 10, 'No border', border: 0);
// Cadre complet
$pdf->cell(60, 10, 'Full frame', border: 1);
// Côtés individuels — Left, Top, Right, Bottom
$pdf->cell(60, 10, 'Top and bottom', border: 'TB');
$pdf->cell(60, 10, 'Left only', border: 'L');Remplissage
$pdf->setFillColor(230, 230, 250)
->cell(0, 10, 'Lavender background', fill: true, newLine: true);multiCell()
Rend un bloc de texte multi-lignes qui s'enroule automatiquement à la largeur spécifiée. Après la sortie, le curseur se déplace sous la cellule.
$pdf->multiCell(
float $w, // Largeur (0 = étendre jusqu'à marge droite)
float $h, // Hauteur de ligne minimale
string $txt, // Contenu texte
mixed $border = 0,
string $align = 'J',
bool $fill = false,
);$pdf->setFont('Helvetica', '', 11)
->multiCell(80, 6, 'This paragraph will wrap at 80mm width. The text flows naturally, respecting word boundaries and hyphenation rules.', border: 1, align: 'J');text()
Place une seule chaîne à une position absolue (x, y). Le curseur n'est pas déplacé après — c'est une méthode "fire and forget".
$pdf->text(20.0, 50.0, 'Positioned at x=20, y=50');Utilisez text() pour les filigranes, étiquettes ou contenu de superposition où vous contrôlez la position exacte.
write()
Écrit du texte inline à la position actuelle du curseur. Le texte s'enroule automatiquement quand il atteint la marge droite, comme taper dans un traitement de texte.
$pdf->setFont('Helvetica', '', 12)
->write(6, 'This sentence starts here and ')
->setFont('Helvetica', 'B', 12)
->write(6, 'this part is bold')
->setFont('Helvetica', '', 12)
->write(6, ' then back to normal.');Le premier paramètre ($h) est la hauteur de ligne. Utilisez write() quand vous avez besoin de changements de police ou style en milieu de phrase.
writeHtml()
Rend une chaîne HTML en utilisant le parseur HTML intégré. Supporte les balises courantes incluant en-têtes, paragraphes, tableaux, listes et styles inline.
$pdf->writeHtml('<h2>Section Title</h2><p>Paragraph with <b>bold</b> and <i>italic</i> text.</p>');Tableaux
$html = '
<table border="1" cellpadding="4">
<thead>
<tr>
<th>Product</th>
<th>Qty</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>Widget A</td>
<td align="center">10</td>
<td align="right">$25.00</td>
</tr>
<tr>
<td>Widget B</td>
<td align="center">5</td>
<td align="right">$42.50</td>
</tr>
</tbody>
</table>';
$pdf->writeHtml($html);writeHtmlCell()
Combine le rendu HTML avec le positionnement de cellule. Le contenu HTML est placé à l'intérieur d'une cellule aux coordonnées spécifiées.
$pdf->writeHtmlCell(
float $w, // Largeur
float $h, // Hauteur minimale
float $x, // Position X
float $y, // Position Y
string $html,
mixed $border = 0,
bool $fill = false,
);$pdf->writeHtmlCell(90, 0, 10, 50, '<p style="color:#336699;">Positioned HTML content with <b>formatting</b>.</p>', border: 1);ln()
Insère un saut de ligne. Le curseur se déplace à la marge gauche et descend de la hauteur spécifiée.
$pdf->ln(); // Saut de ligne utilisant la dernière hauteur de cellule
$pdf->ln(10); // Saut de ligne avec espacement vertical de 10mm
$pdf->ln(0); // Déplacer à la marge gauche sans mouvement verticalChoisir la bonne méthode
| Scénario | Méthode |
|---|---|
| Cellules de tableau, étiquettes, données simple ligne | cell() |
| Paragraphes, descriptions, texte long | multiCell() |
| Filigranes, tampons, étiquettes absolues | text() |
| Texte inline avec formatage mixte | write() |
| Contenu riche avec balisage HTML | writeHtml() |
| Contenu HTML à une position spécifique | writeHtmlCell() |