Documentos multi-página
Genera PDFs que abarcan múltiples páginas con saltos automáticos, headers/footers personalizados y numeración de páginas.
Ejemplo completo
<?php
declare(strict_types=1);
require __DIR__ . '/vendor/autoload.php';
use TcpdfNext\Document;
use TcpdfNext\Enums\Alignment;
$pdf = Document::create()
->setTitle('Annual Report 2026')
->setAutoPageBreak(enabled: true, margin: 25);
// -- Página 1: Portada --------------------------------------------------
$pdf->addPage()
->setY(100)
->setFont('helvetica', style: 'B', size: 28)
->cell(0, 15, 'Annual Report 2026', align: Alignment::Center, newLine: true)
->setFont('helvetica', size: 14)
->setTextColor(108, 117, 125)
->cell(0, 10, 'Acme Corporation', align: Alignment::Center, newLine: true)
->setTextColor(33, 37, 41);
// -- Páginas del cuerpo: Capítulos con salto de página automático ---------------------------
$chapters = [
'Executive Summary' => 'Revenue grew 18% year-over-year to $5.8 billion, driven by strong demand across all product lines and geographic expansion into Southeast Asia.',
'Market Analysis' => 'The global widget market reached $42 billion with a 7.2% CAGR. Our market share increased from 12.1% to 13.8%, placing us second worldwide.',
'Financial Statements' => 'Operating income rose to $870 million. Free cash flow exceeded $400 million, enabling continued investment in R&D and strategic acquisitions.',
];
foreach ($chapters as $title => $body) {
$pdf->addPage()
->setFont('helvetica', style: 'B', size: 20)
->cell(0, 12, $title, newLine: true)
->setFont('helvetica', size: 11);
// Repetir texto del cuerpo para activar saltos de página automáticos
for ($i = 0; $i < 10; $i++) {
$pdf->multiCell(0, 7, $body, align: Alignment::Justified);
}
}
// -- Headers y footers (post-renderizado) -------------------------------------
$total = $pdf->getNumPages();
for ($p = 2; $p <= $total; $p++) { // saltar portada
$pdf->setPage($p)
// Header
->setFont('helvetica', style: 'I', size: 8)
->setTextColor(150, 150, 150)
->setXY(15, 8)
->cell(0, 5, 'Acme Corporation -- Annual Report 2026')
// Footer
->setXY(0, 285)
->cell(210, 5, "Page {$p} of {$total}", align: Alignment::Center);
}
$pdf->setTextColor(33, 37, 41)
->save(__DIR__ . '/multi-page.pdf');
echo "PDF created -- {$total} pages." . PHP_EOL;Conceptos clave
Saltos de página automáticos
->setAutoPageBreak(enabled: true, margin: 25)Cuando el cursor alcanza margin mm desde el borde inferior, se inserta una nueva página automáticamente y el contenido continúa en el margen superior.
Inserción manual de páginas
use TcpdfNext\Enums\Orientation;
->addPage() // A4 portrait (predeterminado)
->addPage(orientation: Orientation::Landscape) // forzar landscapeNumeración de páginas
TCPDF-Next no inserta números de página automáticamente. Usa un enfoque de dos pasadas -- escribe todo el contenido primero, luego estampa los números en cada página:
$total = $pdf->getNumPages();
for ($p = 1; $p <= $total; $p++) {
$pdf->setPage($p)
->setXY(0, 285)
->cell(210, 5, "Page {$p} of {$total}", align: Alignment::Center);
}TIP
El conteo total de páginas es desconocido hasta que todo el contenido ha sido escrito, por eso el patrón de dos pasadas es necesario.
Grupos de páginas
Usa startPageGroup() para numeración basada en secciones (ej., reiniciar en 1 para cada capítulo):
$pdf->startPageGroup();
$currentGroupPage = $pdf->getGroupPageNo();Márgenes
use TcpdfNext\Core\Margin;
->setMargins(new Margin(left: 15, top: 20, right: 15))O configúralos individualmente:
->setLeftMargin(15)
->setTopMargin(20)
->setRightMargin(15)Salida
Este ejemplo genera un PDF multi-página con una portada centrada, tres capítulos que fluyen a través de páginas adicionales via salto de página automático, y un footer "Page X of Y" en cada página excepto la portada.