Skip to content

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étodoModelo de diseñoAjuste de línea
cell()Caja de una sola líneaNo — el texto se recorta
multiCell()Bloque multilíneaSí — ajuste automático al ancho de la celda
text()Posición absolutaNo
write()Flujo en líneaSí — fluye como un procesador de texto
writeHtml()Bloque HTMLSí — diseño HTML completo
writeHtmlCell()HTML en una celda posicionada
ln()Salto de líneaN/A

Ejemplo básico

php
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.

php
$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

php
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

php
// 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

php
$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.

php
$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,
);
php
$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".

php
$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.

php
$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.

php
$pdf->writeHtml('<h2>Section Title</h2><p>Paragraph with <b>bold</b> and <i>italic</i> text.</p>');

Tablas

php
$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.

php
$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,
);
php
$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.

php
$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 vertical

Elegir el método correcto

EscenarioMétodo
Celdas de tabla, etiquetas, datos de una líneacell()
Párrafos, descripciones, texto largomultiCell()
Marcas de agua, sellos, etiquetas absolutastext()
Texto en línea con formato mixtowrite()
Contenido rico con marcado HTMLwriteHtml()
Contenido HTML en una posición específicawriteHtmlCell()

Distribuido bajo la licencia LGPL-3.0-or-later.