Documents multi-pages
Générez des PDF qui s'étendent sur plusieurs pages avec sauts automatiques, en-têtes/pieds de page personnalisés et numérotation de pages.
Exemple complet
<?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);
// -- Page 1 : Page de titre --------------------------------------------------
$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);
// -- Pages de corps : Chapitres avec saut de page auto ---------------------------
$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);
// Répéter le texte du corps pour déclencher sauts de page automatiques
for ($i = 0; $i < 10; $i++) {
$pdf->multiCell(0, 7, $body, align: Alignment::Justified);
}
}
// -- En-têtes & pieds de page (post-rendu) -------------------------------------
$total = $pdf->getNumPages();
for ($p = 2; $p <= $total; $p++) { // sauter page de titre
$pdf->setPage($p)
// En-tête
->setFont('helvetica', style: 'I', size: 8)
->setTextColor(150, 150, 150)
->setXY(15, 8)
->cell(0, 5, 'Acme Corporation -- Annual Report 2026')
// Pied de page
->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;Concepts clés
Sauts de page automatiques
->setAutoPageBreak(enabled: true, margin: 25)Quand le curseur atteint margin mm du bord inférieur, une nouvelle page est insérée automatiquement et le contenu continue à la marge supérieure.
Insertion de page manuelle
use TcpdfNext\Enums\Orientation;
->addPage() // A4 portrait (par défaut)
->addPage(orientation: Orientation::Landscape) // forcer paysageNumérotation de pages
TCPDF-Next n'insère pas de numéros de page automatiquement. Utilisez une approche en deux passes -- écrivez tout le contenu d'abord, puis tamponnez les numéros sur chaque page :
$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
Le nombre total de pages est inconnu jusqu'à ce que tout le contenu ait été écrit, c'est pourquoi le pattern en deux passes est nécessaire.
Groupes de pages
Utilisez startPageGroup() pour numérotation basée sur section (ex : redémarrer à 1 pour chaque chapitre) :
$pdf->startPageGroup();
$currentGroupPage = $pdf->getGroupPageNo();Marges
use TcpdfNext\Core\Margin;
->setMargins(new Margin(left: 15, top: 20, right: 15))Ou définissez-les individuellement :
->setLeftMargin(15)
->setTopMargin(20)
->setRightMargin(15)Sortie
Cet exemple génère un PDF multi-pages avec une page de titre centrée, trois chapitres qui s'écoulent sur des pages supplémentaires via saut de page auto, et un pied de page "Page X of Y" sur chaque page sauf la page de titre.