Skip to content

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

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

php
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

php
$pdf->setPrintHeader(false);  // Suprimir renderização do cabeçalho
$pdf->setPrintFooter(false);  // Suprimir renderização do rodapé

Margens

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

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

php
$pdf->setColumnsArray(array $columns);  // Definir estrutura de colunas
$pdf->setColumn(int $col);              // Alternar para coluna (base 0)
$col = $pdf->getColumn();               // Obter índice da coluna atual

Modo Booklet

O modo booklet alterna margens interna e externa para que as páginas possam ser dobradas e encadernadas:

php
$pdf->setBooklet(bool $val, float $inner, float $outer);
ParâmetroDescrição
$valtrue para habilitar, false para desabilitar
$innerMargem interna (encadernação) em mm
$outerMargem externa (borda) em mm
php
$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

NecessidadeSolução
Branding consistente em toda páginasetHeaderData() ou setHeaderCallback()
Números de página no rodapésetFooterCallback() com getPage() / getNumPages()
Colunas estilo jornalsetColumnsArray() + setColumn()
Saída de booklet pronta para impressãosetBooklet()
Remover cabeçalhos em certas páginassetPrintHeader(false) antes de addPage()

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