Salida de texto (HasTextOutput)
El trait HasTextOutput proporciona los métodos principales para colocar texto en una página. Cada método sirve para un modelo de diseño diferente: celdas fijas, texto fluido, posicionamiento absoluto y renderizado HTML.
Referencia rápida
| Método | Modelo de diseño | Ajuste de línea |
|---|---|---|
cell() | Caja de una sola línea | No — el texto se recorta |
multiCell() | Bloque multilínea | Sí — ajuste automático al ancho de la celda |
text() | Posición absoluta | No |
write() | Flujo en línea | Sí — fluye como un procesador de texto |
writeHtml() | Bloque HTML | Sí — diseño HTML completo |
writeHtmlCell() | HTML en una celda posicionada | Sí |
ln() | Salto de línea | N/A |
Ejemplo básico
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.');Todos los métodos retornan static, por lo que cada llamada puede ser encadenada.
cell()
Dibuja una celda rectangular de una sola línea con borde, relleno de fondo, alineación y enlace opcionales.
$pdf->cell(
float $w, // Ancho (0 = extender hasta el margen derecho)
float $h, // Alto
string $txt, // Contenido de texto
mixed $border = 0, // 0, 1, o combinación 'LTRB'
bool $newLine = false,
string $align = '', // L, C, R, J
bool $fill = false,
mixed $link = '',
);El cursor se mueve a la derecha de la celda (o a la siguiente línea cuando $newLine es true).
Alineación
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');Bordes
// Sin borde
$pdf->cell(60, 10, 'No border', border: 0);
// Marco completo
$pdf->cell(60, 10, 'Full frame', border: 1);
// Lados individuales — Izquierda, Superior, Derecha, Inferior
$pdf->cell(60, 10, 'Top and bottom', border: 'TB');
$pdf->cell(60, 10, 'Left only', border: 'L');Relleno
$pdf->setFillColor(230, 230, 250)
->cell(0, 10, 'Lavender background', fill: true, newLine: true);multiCell()
Renderiza un bloque de texto multilínea que se ajusta automáticamente al ancho especificado. Después de la salida, el cursor se mueve debajo de la celda.
$pdf->multiCell(
float $w, // Ancho (0 = extender hasta el margen derecho)
float $h, // Alto mínimo de línea
string $txt, // Contenido de texto
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()
Coloca una cadena en una posición absoluta (x, y). El cursor no se mueve después — es un método "disparar y olvidar".
$pdf->text(20.0, 50.0, 'Positioned at x=20, y=50');Usa text() para marcas de agua, etiquetas o contenido superpuesto donde controlas la posición exacta.
write()
Escribe texto en línea en la posición actual del cursor. El texto se ajusta automáticamente cuando alcanza el margen derecho, como escribir en un procesador de texto.
$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.');El primer parámetro ($h) es la altura de línea. Usa write() cuando necesites cambios de fuente o estilo a mitad de oración.
writeHtml()
Renderiza una cadena HTML usando el analizador HTML integrado. Soporta etiquetas comunes incluyendo encabezados, párrafos, tablas, listas y estilos en línea.
$pdf->writeHtml('<h2>Section Title</h2><p>Paragraph with <b>bold</b> and <i>italic</i> text.</p>');Tablas
$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()
Combina el renderizado HTML con posicionamiento de celda. El contenido HTML se coloca dentro de una celda en las coordenadas especificadas.
$pdf->writeHtmlCell(
float $w, // Ancho
float $h, // Alto mínimo
float $x, // Posición X
float $y, // Posición 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()
Inserta un salto de línea. El cursor se mueve al margen izquierdo y baja la altura especificada.
$pdf->ln(); // Salto de línea usando la altura de la última celda
$pdf->ln(10); // Salto de línea con 10mm de espaciado vertical
$pdf->ln(0); // Moverse al margen izquierdo sin movimiento verticalElegir el método correcto
| Escenario | Método |
|---|---|
| Celdas de tabla, etiquetas, datos de una línea | cell() |
| Párrafos, descripciones, texto largo | multiCell() |
| Marcas de agua, sellos, etiquetas absolutas | text() |
| Texto en línea con formato mixto | write() |
| Contenido rico con marcado HTML | writeHtml() |
| Contenido HTML en una posición específica | writeHtmlCell() |