Mise en page (HasLayout)
Le trait HasLayout et le module Layout fournissent une structure au niveau page : en-têtes, pieds de page, mises en page multi-colonnes et mode brochure. Le module est composé de PageManager, ColumnManager, BookletManager et HeaderFooterManager.
Toutes les méthodes retournent static, donc chaque appel peut être chaîné.
En-têtes et pieds de page
En-tête intégré
use Yeeefang\TcpdfNext\Core\Document;
$pdf = Document::create()
->setHeaderData('logo.png', 30, 'Company Name', 'Generated report — Confidential')
->setHeaderMargin(10)
->setFooterMargin(10)
->addPage();setHeaderData() accepte un chemin de logo, largeur de logo, chaîne de titre et chaîne de description.
Callbacks personnalisés
Pour un contrôle complet, enregistrez des callbacks qui reçoivent l'instance 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');Activer / Désactiver
$pdf->setPrintHeader(false); // Supprimer le rendu d'en-tête
$pdf->setPrintFooter(false); // Supprimer le rendu de pied de pageMarges
$pdf->setHeaderMargin(float $margin); // Espace au-dessus de l'en-tête
$pdf->setFooterMargin(float $margin); // Espace en-dessous du pied de pageCes marges définissent l'écart entre le bord de page et le contenu en-tête/pied de page.
Mise en page multi-colonnes
Définir les colonnes
$pdf = Document::create()
->addPage()
->setColumnsArray([
['w' => 90, 's' => 5], // Colonne 1 : 90mm large, 5mm espace
['w' => 90, 's' => 0], // Colonne 2 : 90mm large
])
->setColumn(0)
->setFont('Helvetica', '', 10)
->multiCell(0, 5, 'Left column content...')
->setColumn(1)
->multiCell(0, 5, 'Right column content...');Chaque entrée définit une colonne avec w (largeur) et s (espacement). Utilisez setColumn() pour basculer entre colonnes.
Méthodes de colonne
$pdf->setColumnsArray(array $columns); // Définir structure de colonne
$pdf->setColumn(int $col); // Basculer vers colonne (base 0)
$col = $pdf->getColumn(); // Obtenir index de colonne actuelleMode brochure
Le mode brochure alterne les marges intérieures et extérieures pour que les pages puissent être pliées et reliées :
$pdf->setBooklet(bool $val, float $inner, float $outer);| Paramètre | Description |
|---|---|
$val | true pour activer, false pour désactiver |
$inner | Marge intérieure (reliure) en mm |
$outer | Marge extérieure (bord) en mm |
$pdf = Document::create()
->setBooklet(true, 20, 10)
->addPage() // Page impaire : marge intérieure à gauche
->cell(0, 10, 'Page 1 — wider left margin for binding')
->addPage() // Page paire : marge intérieure à droite
->cell(0, 10, 'Page 2 — wider right margin for binding');L'échange de marge se produit automatiquement à chaque appel addPage().
Choisir le bon outil de mise en page
| Besoin | Solution |
|---|---|
| Branding cohérent sur chaque page | setHeaderData() ou setHeaderCallback() |
| Numéros de page dans le pied de page | setFooterCallback() avec getPage() / getNumPages() |
| Colonnes style journal | setColumnsArray() + setColumn() |
| Sortie brochure prête à imprimer | setBooklet() |
| Retirer en-têtes sur certaines pages | setPrintHeader(false) avant addPage() |