Skip to content

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.

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 Fonte

Combine caracteres de estilo para aplicar múltiplos efeitos:

CódigoEstilo
''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.

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

Altera o tamanho da fonte sem trocar a família ou 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);

Espaçamento e Extensão

setFontSpacing()

Ajusta o espaço extra (em pontos) inserido 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 escala horizontal aos glifos. Um valor de 100 é largura 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);

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.

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

ModoValorEfeito
Fill0Texto preenchido normal (padrão)
Stroke1Apenas contorno
FillStroke2Preenchido com contorno
Invisible3Oculto mas selecionável/pesquisável
FillClip4Preencher, depois adicionar ao caminho de recorte
StrokeClip5Tracejar, depois adicionar ao caminho de recorte
FillStrokeClip6Preencher + tracejar, depois recortar
Clip7Adicionar apenas ao caminho 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);

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.

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

Quando chamado com um único argumento, define um valor em escala de cinza (0 = preto, 255 = branco).

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

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

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

Distribuído sob a licença LGPL-3.0-or-later.