Tipografia (HasTypography)
O trait HasTypography controla a aparência visual do texto: família de fonte, estilo, tamanho, espaçamento, extensão, cor, sombra e modo de renderização. Todos os métodos retornam static para encadeamento fluente.
Definindo Fontes
setFont()
Define a família de fonte, estilo e tamanho em uma única chamada.
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 Fonte
Combine caracteres de estilo para aplicar múltiplos efeitos:
| Código | Estilo |
|---|---|
'' | Regular |
'B' | Negrito |
'I' | Itálico |
'BI' | Negrito Itálico |
'U' | Sublinhado |
'D' | Tachado |
'O' | Sobrelinhado |
Estilos podem ser combinados livremente: 'BIU' produz texto negrito, itálico e sublinhado.
$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()
Altera o tamanho da fonte sem trocar a família ou 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);Espaçamento e Extensão
setFontSpacing()
Ajusta o espaço extra (em pontos) inserido 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 escala horizontal aos glifos. Um valor de 100 é largura 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);Medindo Texto
getStringWidth()
Retorna a largura (em unidades do usuário) de uma string renderizada na fonte e tamanho atuais. Útil para calcular layout antes de desenhar.
$pdf->setFont('Helvetica', '', 12);
$width = $pdf->getStringWidth('Invoice Total: $1,250.00');
// Usar a largura medida para alinhar uma célula à direita
$pageWidth = $pdf->getPageWidth();
$rightMargin = $pdf->getRightMargin();
$pdf->setX($pageWidth - $rightMargin - $width)
->cell($width, 10, 'Invoice Total: $1,250.00');Modos de Renderização de Texto
O PDF define 8 modos de renderização de texto via o enum TextRenderer. Estes controlam se o texto é preenchido, tracejado, usado como caminho de recorte ou oculto.
| Modo | Valor | Efeito |
|---|---|---|
| Fill | 0 | Texto preenchido normal (padrão) |
| Stroke | 1 | Apenas contorno |
| FillStroke | 2 | Preenchido com contorno |
| Invisible | 3 | Oculto mas selecionável/pesquisável |
| FillClip | 4 | Preencher, depois adicionar ao caminho de recorte |
| StrokeClip | 5 | Tracejar, depois adicionar ao caminho de recorte |
| FillStrokeClip | 6 | Preencher + tracejar, depois recortar |
| Clip | 7 | Adicionar apenas ao caminho 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);O modo Invisible (3) é especialmente útil para sobreposições OCR — você coloca texto reconhecido sobre uma imagem digitalizada para que o PDF seja pesquisável enquanto a imagem permanece visível.
Cor do Texto
setTextColor()
Define a cor do texto usando valores RGB.
$pdf->setTextColor(0, 0, 0) // Preto
->cell(0, 10, 'Black text', newLine: true)
->setTextColor(220, 50, 50) // Vermelho
->cell(0, 10, 'Red text', newLine: true)
->setTextColor(0, 102, 204) // Azul
->cell(0, 10, 'Blue text', newLine: true)
->setTextColor(0, 0, 0); // Resetar para pretoQuando chamado com um único argumento, define um valor em escala de cinza (0 = preto, 255 = branco).
$pdf->setTextColor(128)
->cell(0, 10, 'Gray text', newLine: true);Sombra de Texto
setTextShadow()
Aplica um efeito de sombra abaixo do texto. A sombra é definida como um array associativo.
$pdf->setFont('Helvetica', 'B', 28)
->setTextShadow([
'enabled' => true,
'depth_w' => 0.4, // Deslocamento horizontal (mm)
'depth_h' => 0.4, // Deslocamento vertical (mm)
'color' => [180, 180, 180],
'opacity' => 0.5,
'blend_mode' => 'Normal',
])
->cell(0, 15, 'Heading with Shadow', newLine: true)
->setTextShadow(['enabled' => false]);Exemplo Completo
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->addPage()
// Título — grande, negrito, azul
->setFont('Helvetica', 'B', 24)
->setTextColor(0, 51, 102)
->cell(0, 14, 'Monthly Report', newLine: true)
// Subtítulo — regular, cinza, com espaçamento extra
->setFont('Helvetica', '', 12)
->setTextColor(100, 100, 100)
->setFontSpacing(1.0)
->cell(0, 10, 'February 2026', newLine: true)
->setFontSpacing(0)
->ln(5)
// Texto do corpo — preto, 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 de rodapé — pequena, itálica, cinza
->setFont('Times', 'I', 8)
->setTextColor(150, 150, 150)
->cell(0, 5, '* All figures are unaudited.')
->save('report.pdf');