# Multi-colonnes

Cet exemple est une variation du précédent montrant comment formater le texte sur plusieurs colonnes.

    <?php
    require('fpdf.php');

    class PDF extends FPDF
    {
    // Colonne courante
    var $col = 0;
    // Ordonnée du début des colonnes
    var $y0;

    function Header()
    {
        // En-tête
        global $titre;

        $this->SetFont('Arial','B',15);
        $w = $this->GetStringWidth($titre)+6;
        $this->SetX((210-$w)/2);
        $this->SetDrawColor(0,80,180);
        $this->SetFillColor(230,230,0);
        $this->SetTextColor(220,50,50);
        $this->SetLineWidth(1);
        $this->Cell($w,9,$titre,1,1,'C',true);
        $this->Ln(10);
        // Sauvegarde de l'ordonnée
        $this->y0 = $this->GetY();
    }

    function Footer()
    {
        // Pied de page
        $this->SetY(-15);
        $this->SetFont('Arial','I',8);
        $this->SetTextColor(128);
        $this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
    }

    function SetCol($col)
    {
        // Positionnement sur une colonne
        $this->col = $col;
        $x = 10+$col*65;
        $this->SetLeftMargin($x);
        $this->SetX($x);
    }

    function AcceptPageBreak()
    {
        // Méthode autorisant ou non le saut de page automatique
        if($this->col<2)
        {
            // Passage à la colonne suivante
            $this->SetCol($this->col+1);
            // Ordonnée en haut
            $this->SetY($this->y0);
            // On reste sur la page
            return false;
        }
        else
        {
            // Retour en première colonne
            $this->SetCol(0);
            // Saut de page
            return true;
        }
    }

    function TitreChapitre($num, $libelle)
    {
        // Titre
        $this->SetFont('Arial','',12);
        $this->SetFillColor(200,220,255);
        $this->Cell(0,6,"Chapitre $num : $libelle",0,1,'L',true);
        $this->Ln(4);
        // Sauvegarde de l'ordonnée
        $this->y0 = $this->GetY();
    }

    function CorpsChapitre($fichier)
    {
        // Lecture du fichier texte
        $txt = file_get_contents($fichier);
        // Police
        $this->SetFont('Times','',12);
        // Sortie du texte sur 6 cm de largeur
        $this->MultiCell(60,5,$txt);
        $this->Ln();
        // Mention
        $this->SetFont('','I');
        $this->Cell(0,5,"(fin de l'extrait)");
        // Retour en première colonne
        $this->SetCol(0);
    }

    function AjouterChapitre($num, $titre, $fichier)
    {
        // Ajout du chapitre
        $this->AddPage();
        $this->TitreChapitre($num,$titre);
        $this->CorpsChapitre($fichier);
    }
    }

    $pdf = new PDF();
    $titre = 'Vingt mille lieues sous les mers';
    $pdf->SetTitle($titre);
    $pdf->SetAuthor('Jules Verne');
    $pdf->AjouterChapitre(1,'UN ÉCUEIL FUYANT','20k_c1.txt');
    $pdf->AjouterChapitre(2,'LE POUR ET LE CONTRE','20k_c2.txt');
    $pdf->Output();
    ?>

[Démo]

La méthode-clé utilisée est AcceptPageBreak(). Elle permet d'accepter ou non un saut de page automatique. En refusant le saut et en modifiant la marge gauche (par SetLeftMargin()), on obtient le formatage en colonnes.
Pour le reste, peu de changements ; deux propriétés ont été ajoutées à la classe pour mémoriser le numéro de colonne courant ainsi que l'ordonnée du début des colonnes, et l'appel à MultiCell() spécifie que le texte a 6 cm de largeur.