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.
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ódigo | Estilo |
|---|---|
'' | 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.
$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.
$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.
$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.
$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.
$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.
| Modo | Valor | Efecto |
|---|---|---|
| Fill | 0 | Texto relleno normal (predeterminado) |
| Stroke | 1 | Solo contorno |
| FillStroke | 2 | Relleno con contorno |
| Invisible | 3 | Oculto pero seleccionable/buscable |
| FillClip | 4 | Rellenar, luego agregar a ruta de recorte |
| StrokeClip | 5 | Trazar, luego agregar a ruta de recorte |
| FillStrokeClip | 6 | Rellenar + trazar, luego recortar |
| Clip | 7 | Solo agregar a ruta de recorte |
$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.
$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 negroCuando se llama con un solo argumento, establece un valor en escala de grises (0 = negro, 255 = blanco).
$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.
$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
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');