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
{
protected $col = 0; // Colonne courante
protected $y0;      // Ordonnée du début des colonnes

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.