Skip to content

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é

php
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 :

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');

Activer / Désactiver

php
$pdf->setPrintHeader(false);  // Supprimer le rendu d'en-tête
$pdf->setPrintFooter(false);  // Supprimer le rendu de pied de page

Marges

php
$pdf->setHeaderMargin(float $margin);  // Espace au-dessus de l'en-tête
$pdf->setFooterMargin(float $margin);  // Espace en-dessous du pied de page

Ces 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

php
$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

php
$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 actuelle

Mode brochure

Le mode brochure alterne les marges intérieures et extérieures pour que les pages puissent être pliées et reliées :

php
$pdf->setBooklet(bool $val, float $inner, float $outer);
ParamètreDescription
$valtrue pour activer, false pour désactiver
$innerMarge intérieure (reliure) en mm
$outerMarge extérieure (bord) en mm
php
$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

BesoinSolution
Branding cohérent sur chaque pagesetHeaderData() ou setHeaderCallback()
Numéros de page dans le pied de pagesetFooterCallback() avec getPage() / getNumPages()
Colonnes style journalsetColumnsArray() + setColumn()
Sortie brochure prête à imprimersetBooklet()
Retirer en-têtes sur certaines pagessetPrintHeader(false) avant addPage()

Distribué sous licence LGPL-3.0-or-later.