Skip to content

Templates (XObjects)

PDF Form XObjects — referidos como templates no TCPDF-Next — permitem gravar um bloco de conteúdo uma vez e estampá-lo em qualquer número de páginas. Isso é ideal para cabeçalhos, rodapés, marcas d'água, logos e qualquer elemento que se repita ao longo do documento.

Todos os métodos retornam static, então cada chamada pode ser encadeada (exceto startTemplate(), que retorna o ID do template).

Referência Rápida

MétodoPropósito
startTemplate()Iniciar gravação de template; retorna ID do template
endTemplate()Parar gravação
printTemplate()Posicionar template gravado na página atual

Exemplo Básico

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create();

// Criar template de cabeçalho reutilizável
$tpl = $pdf->startTemplate(190, 20);
$pdf->setFont('Helvetica', 'B', 14)
    ->setTextColor(255, 102, 0)
    ->cell(0, 10, 'ACME Corp — Confidential', align: 'C')
    ->line(0, 18, 190, 18);
$pdf->endTemplate();

// Usar o template em múltiplas páginas
$pdf->addPage()
    ->printTemplate($tpl, 10, 10)
    ->setFont('Helvetica', '', 12)
    ->setY(35)
    ->cell(0, 10, 'Page 1 content', newLine: true)

    ->addPage()
    ->printTemplate($tpl, 10, 10)
    ->setY(35)
    ->cell(0, 10, 'Page 2 content', newLine: true);

startTemplate()

php
$tpl = $pdf->startTemplate(float $w = 0, float $h = 0): int

Inicia a gravação de um novo template. Todas as operações de desenho após esta chamada são capturadas no template em vez de serem renderizadas diretamente na página.

ParâmetroTipoDescrição
$wfloatLargura do template em unidades do usuário (0 = largura da página)
$hfloatAltura do template em unidades do usuário (0 = altura da página)

Retorna um ID inteiro do template usado para referenciar o template posteriormente.

WARNING

Não chame addPage() durante a gravação de um template. Templates capturam conteúdo dentro de uma caixa delimitadora fixa — não são páginas.

endTemplate()

Para a gravação e finaliza o template. Conteúdo desenhado após esta chamada vai para a página atual novamente.

printTemplate()

php
$pdf->printTemplate(int $id, float $x, float $y, float $w = 0, float $h = 0): static

Estampa um template previamente gravado na página atual na posição especificada.

ParâmetroTipoDescrição
$idintID do template retornado por startTemplate()
$xfloatPosição X na página
$yfloatPosição Y na página
$wfloatLargura de exibição (0 = largura original do template)
$hfloatAltura de exibição (0 = altura original do template)

Você pode imprimir o mesmo template em tamanhos diferentes variando $w e $h. O conteúdo do template é escalado para caber.

Casos de Uso

Cabeçalho / Rodapé Repetido

php
$header = $pdf->startTemplate(190, 15);
$pdf->setFont('Helvetica', 'B', 10)
    ->cell(95, 10, 'Company Name', align: 'L')
    ->cell(95, 10, date('Y-m-d'), align: 'R');
$pdf->endTemplate();

for ($i = 1; $i <= 5; $i++) {
    $pdf->addPage()
        ->printTemplate($header, 10, 10)
        ->setY(30)
        ->cell(0, 10, "Content for page {$i}", newLine: true);
}

Logo Escalado

Imprima o mesmo template em tamanhos diferentes:

php
$logo = $pdf->startTemplate(60, 20);
$pdf->image('/path/to/logo.png', 0, 0, 60, 20);
$pdf->endTemplate();

$pdf->addPage()
    ->printTemplate($logo, 10, 10, 60, 20)   // Tamanho completo
    ->printTemplate($logo, 10, 40, 30, 10);   // Metade do tamanho

Dicas

  • Templates são armazenados como PDF Form XObjects -- o conteúdo é definido uma vez independentemente de quantas vezes é impresso, mantendo o tamanho do arquivo baixo.
  • Templates podem conter qualquer conteúdo desenhável: texto, imagens, formas e até outros templates.
  • O sistema de coordenadas dentro de um template começa em (0, 0) no canto superior esquerdo da caixa delimitadora.

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