Skip to content

Diseño (HasLayout)

El trait HasLayout y el módulo Layout proporcionan estructura a nivel de página: encabezados, pies de página, diseños multi-columna y modo folleto. El módulo está compuesto por PageManager, ColumnManager, BookletManager y HeaderFooterManager.

Todos los métodos retornan static, por lo que cada llamada puede ser encadenada.

Encabezados y pies de página

Encabezado integrado

php
use Yeeefang\TcpdfNext\Core\Document;

$pdf = Document::create()
    ->setHeaderData('logo.png', 30, 'Company Name', 'Generated report — Confidential')
    ->setHeaderMargin(10)
    ->setFooterMargin(10)
    ->addPage();

setHeaderData() acepta una ruta de logo, ancho del logo, cadena de título y cadena de descripción.

Callbacks personalizados

Para control total, registra callbacks que reciben la instancia de 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');

Activar / Desactivar

php
$pdf->setPrintHeader(false);  // Suprimir renderizado del encabezado
$pdf->setPrintFooter(false);  // Suprimir renderizado del pie de página

Márgenes

php
$pdf->setHeaderMargin(float $margin);  // Espacio sobre el encabezado
$pdf->setFooterMargin(float $margin);  // Espacio debajo del pie de página

Estos márgenes definen el espacio entre el borde de la página y el contenido del encabezado/pie de página.

Diseño multi-columna

Definir columnas

php
$pdf = Document::create()
    ->addPage()
    ->setColumnsArray([
        ['w' => 90, 's' => 5],  // Columna 1: 90mm de ancho, 5mm de espacio
        ['w' => 90, 's' => 0],  // Columna 2: 90mm de ancho
    ])
    ->setColumn(0)
    ->setFont('Helvetica', '', 10)
    ->multiCell(0, 5, 'Left column content...')
    ->setColumn(1)
    ->multiCell(0, 5, 'Right column content...');

Cada entrada define una columna con w (ancho) y s (espaciado). Usa setColumn() para cambiar entre columnas.

Métodos de columnas

php
$pdf->setColumnsArray(array $columns);  // Definir estructura de columnas
$pdf->setColumn(int $col);              // Cambiar a columna (base 0)
$col = $pdf->getColumn();               // Obtener índice de columna actual

Modo folleto

El modo folleto alterna márgenes internos y externos para que las páginas puedan doblarse y encuadernarse:

php
$pdf->setBooklet(bool $val, float $inner, float $outer);
ParámetroDescripción
$valtrue para activar, false para desactivar
$innerMargen interior (encuadernación) en mm
$outerMargen exterior (borde) en mm
php
$pdf = Document::create()
    ->setBooklet(true, 20, 10)
    ->addPage()   // Página impar: margen interior a la izquierda
    ->cell(0, 10, 'Page 1 — wider left margin for binding')
    ->addPage()   // Página par: margen interior a la derecha
    ->cell(0, 10, 'Page 2 — wider right margin for binding');

El intercambio de márgenes ocurre automáticamente en cada llamada a addPage().

Elegir la herramienta de diseño correcta

NecesidadSolución
Marca consistente en cada páginasetHeaderData() o setHeaderCallback()
Números de página en el piesetFooterCallback() con getPage() / getNumPages()
Columnas estilo periódicosetColumnsArray() + setColumn()
Salida de folleto lista para impresiónsetBooklet()
Quitar encabezados en ciertas páginassetPrintHeader(false) antes de addPage()

Distribuido bajo la licencia LGPL-3.0-or-later.