Saída de Texto (HasTextOutput)
O trait HasTextOutput fornece os métodos principais para posicionar texto na página. Cada método atende a um modelo de layout diferente: células fixas, texto fluido, posicionamento absoluto e renderização HTML.
Referência Rápida
| Método | Modelo de Layout | Quebra de Linha |
|---|---|---|
cell() | Caixa de linha única | Não — texto é cortado |
multiCell() | Bloco de múltiplas linhas | Sim — quebra automática na largura da célula |
text() | Posição absoluta | Não |
write() | Fluxo inline | Sim — flui como um processador de texto |
writeHtml() | Bloco HTML | Sim — layout HTML completo |
writeHtmlCell() | HTML em célula posicionada | Sim |
ln() | Quebra de linha | N/A |
Exemplo Básico
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 os métodos retornam static, então cada chamada pode ser encadeada.
cell()
Desenha uma célula retangular de linha única com borda opcional, preenchimento de fundo, alinhamento e link.
$pdf->cell(
float $w, // Largura (0 = estender até a margem direita)
float $h, // Altura
string $txt, // Conteúdo de texto
mixed $border = 0, // 0, 1, ou combinação 'LTRB'
bool $newLine = false,
string $align = '', // L, C, R, J
bool $fill = false,
mixed $link = '',
);O cursor move para a direita da célula (ou para a próxima linha quando $newLine é true).
Alinhamento
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');Bordas
// Sem borda
$pdf->cell(60, 10, 'No border', border: 0);
// Moldura completa
$pdf->cell(60, 10, 'Full frame', border: 1);
// Lados individuais — Left, Top, Right, Bottom
$pdf->cell(60, 10, 'Top and bottom', border: 'TB');
$pdf->cell(60, 10, 'Left only', border: 'L');Preenchimento
$pdf->setFillColor(230, 230, 250)
->cell(0, 10, 'Lavender background', fill: true, newLine: true);multiCell()
Renderiza um bloco de texto multi-linha que quebra automaticamente na largura especificada. Após a saída, o cursor move para abaixo da célula.
$pdf->multiCell(
float $w, // Largura (0 = estender até a margem direita)
float $h, // Altura mínima da linha
string $txt, // Conteúdo de texto
mixed $border = 0,
string $align = 'J',
bool $fill = false,
);$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()
Posiciona uma string em uma posição absoluta (x, y). O cursor não é movido depois — este é um método "dispare e esqueça".
$pdf->text(20.0, 50.0, 'Positioned at x=20, y=50');Use text() para marcas d'água, rótulos ou conteúdo sobreposto onde você controla a posição exata.
write()
Escreve texto inline na posição atual do cursor. O texto quebra automaticamente quando atinge a margem direita, assim como digitar em um processador de texto.
$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.');O primeiro parâmetro ($h) é a altura da linha. Use write() quando precisar de mudanças de fonte ou estilo no meio da sentença.
writeHtml()
Renderiza uma string HTML usando o analisador HTML embutido. Suporta tags comuns incluindo cabeçalhos, parágrafos, tabelas, listas e estilos inline.
$pdf->writeHtml('<h2>Section Title</h2><p>Paragraph with <b>bold</b> and <i>italic</i> text.</p>');Tabelas
$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 renderização HTML com posicionamento de célula. O conteúdo HTML é colocado dentro de uma célula nas coordenadas especificadas.
$pdf->writeHtmlCell(
float $w, // Largura
float $h, // Altura mínima
float $x, // Posição X
float $y, // Posição Y
string $html,
mixed $border = 0,
bool $fill = false,
);$pdf->writeHtmlCell(90, 0, 10, 50, '<p style="color:#336699;">Positioned HTML content with <b>formatting</b>.</p>', border: 1);ln()
Insere uma quebra de linha. O cursor move para a margem esquerda e desce pela altura especificada.
$pdf->ln(); // Quebra de linha usando a altura da última célula
$pdf->ln(10); // Quebra de linha com espaçamento vertical de 10mm
$pdf->ln(0); // Mover para margem esquerda sem movimento verticalEscolhendo o Método Certo
| Cenário | Método |
|---|---|
| Células de tabela, rótulos, dados de linha única | cell() |
| Parágrafos, descrições, texto longo | multiCell() |
| Marcas d'água, carimbos, rótulos absolutos | text() |
| Texto inline com formatação mista | write() |
| Conteúdo rico com marcação HTML | writeHtml() |
| Conteúdo HTML em posição específica | writeHtmlCell() |