Layout (HasLayout)
O trait HasLayout e o módulo Layout fornecem estrutura em nível de página: cabeçalhos, rodapés, layouts multi-coluna e modo booklet. O módulo é composto por PageManager, ColumnManager, BookletManager e HeaderFooterManager.
Todos os métodos retornam static, então cada chamada pode ser encadeada.
Cabeçalhos e Rodapés
Cabeçalho Embutido
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setHeaderData('logo.png', 30, 'Company Name', 'Generated report — Confidential')
->setHeaderMargin(10)
->setFooterMargin(10)
->addPage();setHeaderData() aceita um caminho de logo, largura do logo, string de título e string de descrição.
Callbacks Personalizados
Para controle total, registre callbacks que recebem a instância do Document:
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create();
$pdf->setHeaderCallback(function (Document $doc) {
$doc->setFont('Helvetica', 'B', 12)
->cell(0, 10, 'My Company — Confidential', align: 'C', newLine: true)
->line(10, 18, 200, 18);
});
$pdf->setFooterCallback(function (Document $doc) {
$doc->setY(-15)
->setFont('Helvetica', '', 8)
->cell(0, 10, 'Page ' . $doc->getPage() . '/' . $doc->getNumPages(), align: 'C');
});
$pdf->addPage()
->setFont('Helvetica', '', 12)
->cell(0, 10, 'Content with custom header and footer');Habilitar / Desabilitar
$pdf->setPrintHeader(false); // Suprimir renderização do cabeçalho
$pdf->setPrintFooter(false); // Suprimir renderização do rodapéMargens
$pdf->setHeaderMargin(float $margin); // Espaço acima do cabeçalho
$pdf->setFooterMargin(float $margin); // Espaço abaixo do rodapéEssas margens definem o espaço entre a borda da página e o conteúdo do cabeçalho/rodapé.
Layout Multi-Coluna
Definindo Colunas
$pdf = Document::create()
->addPage()
->setColumnsArray([
['w' => 90, 's' => 5], // Coluna 1: 90mm largura, 5mm espaçamento
['w' => 90, 's' => 0], // Coluna 2: 90mm largura
])
->setColumn(0)
->setFont('Helvetica', '', 10)
->multiCell(0, 5, 'Left column content...')
->setColumn(1)
->multiCell(0, 5, 'Right column content...');Cada entrada define uma coluna com w (largura) e s (espaçamento). Use setColumn() para alternar entre colunas.
Métodos de Coluna
$pdf->setColumnsArray(array $columns); // Definir estrutura de colunas
$pdf->setColumn(int $col); // Alternar para coluna (base 0)
$col = $pdf->getColumn(); // Obter índice da coluna atualModo Booklet
O modo booklet alterna margens interna e externa para que as páginas possam ser dobradas e encadernadas:
$pdf->setBooklet(bool $val, float $inner, float $outer);| Parâmetro | Descrição |
|---|---|
$val | true para habilitar, false para desabilitar |
$inner | Margem interna (encadernação) em mm |
$outer | Margem externa (borda) em mm |
$pdf = Document::create()
->setBooklet(true, 20, 10)
->addPage() // Página ímpar: margem interna à esquerda
->cell(0, 10, 'Page 1 — wider left margin for binding')
->addPage() // Página par: margem interna à direita
->cell(0, 10, 'Page 2 — wider right margin for binding');A troca de margem acontece automaticamente a cada chamada addPage().
Escolhendo a Ferramenta de Layout Certa
| Necessidade | Solução |
|---|---|
| Branding consistente em toda página | setHeaderData() ou setHeaderCallback() |
| Números de página no rodapé | setFooterCallback() com getPage() / getNumPages() |
| Colunas estilo jornal | setColumnsArray() + setColumn() |
| Saída de booklet pronta para impressão | setBooklet() |
| Remover cabeçalhos em certas páginas | setPrintHeader(false) antes de addPage() |