Skip to content

Tipografía (HasTypography)

El trait HasTypography controla la apariencia visual del texto: familia de fuente, estilo, tamaño, espaciado, estiramiento, color, sombra y modo de renderizado. Todos los métodos retornan static para encadenamiento fluido.

Configurar fuentes

setFont()

Establece la familia de fuente actual, el estilo y el tamaño en una sola llamada.

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);

Estilos de fuente

Combina caracteres de estilo para aplicar múltiples efectos:

CódigoEstilo
''Regular
'B'Negrita
'I'Cursiva
'BI'Negrita cursiva
'U'Subrayado
'D'Tachado
'O'Sobrelínea

Los estilos pueden combinarse libremente: 'BIU' produce texto en negrita, cursiva y subrayado.

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()

Cambia el tamaño de la fuente sin cambiar la familia ni el estilo.

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);

Espaciado y estiramiento

setFontSpacing()

Ajusta el espacio extra (en puntos) insertado entre cada par de caracteres.

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()

Aplica escalado horizontal a los glifos. Un valor de 100 es el ancho normal.

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);

Medición de texto

getStringWidth()

Retorna el ancho (en unidades de usuario) de una cadena renderizada con la fuente y tamaño actuales. Útil para calcular el diseño antes de dibujar.

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

// Usar el ancho medido para alinear a la derecha una celda
$pageWidth = $pdf->getPageWidth();
$rightMargin = $pdf->getRightMargin();
$pdf->setX($pageWidth - $rightMargin - $width)
    ->cell($width, 10, 'Invoice Total: $1,250.00');

Modos de renderizado de texto

PDF define 8 modos de renderizado de texto a través del enum TextRenderer. Estos controlan si el texto se rellena, se traza, se usa como ruta de recorte o se oculta.

ModoValorEfecto
Fill0Texto relleno normal (predeterminado)
Stroke1Solo contorno
FillStroke2Relleno con contorno
Invisible3Oculto pero seleccionable/buscable
FillClip4Rellenar, luego agregar a ruta de recorte
StrokeClip5Trazar, luego agregar a ruta de recorte
FillStrokeClip6Rellenar + trazar, luego recortar
Clip7Solo agregar a ruta de recorte
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);

El modo Invisible (3) es especialmente útil para superposiciones OCR — colocas texto reconocido sobre una imagen escaneada para que el PDF sea buscable mientras la imagen permanece visible.

Color de texto

setTextColor()

Establece el color del texto usando valores RGB.

php
$pdf->setTextColor(0, 0, 0)          // Negro
    ->cell(0, 10, 'Black text', newLine: true)
    ->setTextColor(220, 50, 50)       // Rojo
    ->cell(0, 10, 'Red text', newLine: true)
    ->setTextColor(0, 102, 204)       // Azul
    ->cell(0, 10, 'Blue text', newLine: true)
    ->setTextColor(0, 0, 0);          // Restablecer a negro

Cuando se llama con un solo argumento, establece un valor en escala de grises (0 = negro, 255 = blanco).

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

Sombra de texto

setTextShadow()

Aplica un efecto de sombra debajo del texto. La sombra se define como un arreglo asociativo.

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

Ejemplo completo

php
use Yeeefang\TcpdfNext\Core\Document;

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

    // Título — grande, negrita, azul
    ->setFont('Helvetica', 'B', 24)
    ->setTextColor(0, 51, 102)
    ->cell(0, 14, 'Monthly Report', newLine: true)

    // Subtítulo — regular, gris, con espaciado extra
    ->setFont('Helvetica', '', 12)
    ->setTextColor(100, 100, 100)
    ->setFontSpacing(1.0)
    ->cell(0, 10, 'February 2026', newLine: true)
    ->setFontSpacing(0)
    ->ln(5)

    // Texto del cuerpo — negro, 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)

    // Nota al pie — pequeña, cursiva, gris
    ->setFont('Times', 'I', 8)
    ->setTextColor(150, 150, 150)
    ->cell(0, 5, '* All figures are unaudited.')

    ->save('report.pdf');

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