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
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:
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
$pdf->setPrintHeader(false); // Suprimir renderizado del encabezado
$pdf->setPrintFooter(false); // Suprimir renderizado del pie de páginaMárgenes
$pdf->setHeaderMargin(float $margin); // Espacio sobre el encabezado
$pdf->setFooterMargin(float $margin); // Espacio debajo del pie de páginaEstos 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
$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
$pdf->setColumnsArray(array $columns); // Definir estructura de columnas
$pdf->setColumn(int $col); // Cambiar a columna (base 0)
$col = $pdf->getColumn(); // Obtener índice de columna actualModo folleto
El modo folleto alterna márgenes internos y externos para que las páginas puedan doblarse y encuadernarse:
$pdf->setBooklet(bool $val, float $inner, float $outer);| Parámetro | Descripción |
|---|---|
$val | true para activar, false para desactivar |
$inner | Margen interior (encuadernación) en mm |
$outer | Margen exterior (borde) en mm |
$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
| Necesidad | Solución |
|---|---|
| Marca consistente en cada página | setHeaderData() o setHeaderCallback() |
| Números de página en el pie | setFooterCallback() con getPage() / getNumPages() |
| Columnas estilo periódico | setColumnsArray() + setColumn() |
| Salida de folleto lista para impresión | setBooklet() |
| Quitar encabezados en ciertas páginas | setPrintHeader(false) antes de addPage() |