diff -urN fpdf153.orig/fpdf.css fpdf153/fpdf.css --- fpdf153.orig/fpdf.css Sat Aug 2 19:34:52 2003 +++ fpdf153/fpdf.css Sun Apr 9 15:28:52 2006 @@ -1,11 +1,23 @@ -BODY {font-family:times new roman,serif} -H2 {color:#4000A0} -P.demo {text-align:center; margin-top:-10px} -A.demo {text-decoration:none; font-weight:bold; color:#0000CC} -A.demo:link {text-decoration:none; font-weight:bold; color:#0000CC} -A.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF} -A.demo:active {text-decoration:none; font-weight:bold; color:#0000FF} +body {font-family:"Times New Roman",serif} +h1 {font-size:150%; color:#4000A0} +h2 {color:#4000A0} +h3 {font-size:100%; margin-top:1.2em} +dl.param dt {text-decoration:underline} +dl.param dd {margin-top:1em; margin-bottom:1em} +dl.param ul {margin-top:1em; margin-bottom:1em} +tt, code, kbd {font-family:"Courier New",Courier,monospace; font-size:82%} +div.source {margin-top:1.4em; margin-bottom:1.3em} +div.source pre {display:table; border:1px solid #24246A; width:100%; margin:0em; font-family:inherited; font-size:100%} +div.source code {display:block; border:1px solid #C5C5EC; background-color:#F0F5FF; padding:6px; color:#000000} +div.doc-source {margin-top:1.4em; margin-bottom:1.3em} +div.doc-source pre {display:table; width:100%; margin:0em; font-family:inherited; font-size:100%} +div.doc-source code {display:block; background-color:#E0E0E0; padding:4px} .st {font-weight:bold; color:#900000} .kw {color:#000080; font-weight:bold} .str {color:#CC0000} .cmt {color:#008000} +p.demo {text-align:center; margin-top:-0.9em} +a.demo {text-decoration:none; font-weight:bold; color:#0000CC} +a.demo:link {text-decoration:none; font-weight:bold; color:#0000CC} +a.demo:hover {text-decoration:none; font-weight:bold; color:#0000FF} +a.demo:active {text-decoration:none; font-weight:bold; color:#0000FF} diff -urN fpdf153.orig/tutoriel/index.htm fpdf153/tutoriel/index.htm --- fpdf153.orig/tutoriel/index.htm Fri Dec 31 18:31:16 2004 +++ fpdf153/tutoriel/index.htm Tue Aug 15 13:52:48 2006 @@ -1,18 +1,21 @@ - - - -Tutoriels - - - -

Tutoriels

-Ces différents exemples montrent rapidement comment utiliser FPDF. Vous y trouverez expliquées toutes les principales fonctionnalités.

-Tutoriel 1 : Exemple minimal
-Tutoriel 2 : En-tête, pied de page, saut de page et image
-Tutoriel 3 : Retour du texte à la ligne et couleurs
-Tutoriel 4 : Multi-colonnes
-Tutoriel 5 : Tableaux
-Tutoriel 6 : Liens et texte en mode flot
-Tutoriel 7 : Ajout de polices et encodages
- - + + + + +Tutoriels + + + +

Tutoriels

+

Ces différents exemples montrent rapidement comment utiliser FPDF. Vous y trouverez expliquées toutes les principales fonctionnalités.

+ + + diff -urN fpdf153.orig/tutoriel/tuto1.htm fpdf153/tutoriel/tuto1.htm --- fpdf153.orig/tutoriel/tuto1.htm Fri Dec 31 18:19:42 2004 +++ fpdf153/tutoriel/tuto1.htm Tue Aug 15 13:52:48 2006 @@ -1,55 +1,55 @@ - - - -Exemple minimal - - - -

Exemple minimal

-Voici pour commencer l'exemple classique :
-
-
- -<?php
require('fpdf.php');

$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World !');
$pdf->Output();
?> -
-

- + Après avoir inclus la librairie, un object FPDF est créé. -Le constructeur FPDF() est utilisé ici avec les valeurs par défaut : les pages sont en +Le constructeur FPDF() est utilisé ici avec les valeurs par défaut : les pages sont en portrait A4 et l'unité de mesure est le millimètre. On aurait pu l'indiquer explicitement par : -
-
-
- -$pdf=new FPDF('P','mm','A4');
-
-

+
+
$pdf=new FPDF('P','mm','A4');
+
+
Il est possible de passer en paysage (L), d'utiliser d'autres formats de page (comme A3 et A5) ainsi que d'autres unités de mesure (pt, cm, in).

Il n'y a pour l'instant encore aucune page, c'est pourquoi il faut en ajouter une avec -AddPage(). L'origine est en haut à gauche et la position courante est placée par défaut -à 1 cm des bords ; on peut changer ces marges par SetMargins(). +AddPage(). L'origine est en haut à gauche et la position courante est placée par défaut +à 1 cm des bords ; on peut changer ces marges par SetMargins().

-Avant d'imprimer du texte, il est impératif de définir la police avec SetFont(), sinon +Avant d'imprimer du texte, il est impératif de définir la police avec SetFont(), sinon le document serait invalide. On choisit de l'Arial gras en taille 16 : -
-
-
- -$pdf->SetFont('Arial','B',16);
-
-

+
+
$pdf->SetFont('Arial','B',16);
+
+
On aurait pu spécifier de l'italique avec I, du souligné avec U ou une police normale avec une chaîne vide (ou bien encore une combinaison de styles). A noter que la taille de la police est ici donnée en points, pas en millimètres (ou autre unité choisie) ; c'est @@ -57,32 +57,26 @@ ZapfDingbats.

-On imprime ensuite une cellule grâce à Cell(). Une cellule est une zone rectangulaire, +On imprime ensuite une cellule grâce à Cell(). Une cellule est une zone rectangulaire, éventuellement encadrée, qui contient du texte. Elle est imprimée à la position courante. On spécifie ses dimensions, le texte (centré ou aligné), si des bords doivent être tracés, et si la position courante doit être déplacée à droite, en dessous ou bien doit retourner au début de la ligne suivante. On aurait par exemple encadré le texte comme ceci : -
-
-
- -$pdf->Cell(40,10,'Hello World !',1);
-
-

+
+
$pdf->Cell(40,10,'Hello World !',1);
+
+
Si on veut ajouter une nouvelle cellule à droite avec du texte centré et retourner à la ligne, on fait : -
-
-
- -$pdf->Cell(60,10,'Powered by FPDF.',0,1,'C');
-
-

-Remarque : le retour à la ligne peut également s'effectuer grâce à la méthode Ln(). Cette +
+
$pdf->Cell(60,10,'Powered by FPDF.',0,1,'C');
+
+
+Remarque : le retour à la ligne peut également s'effectuer grâce à la méthode Ln(). Cette dernière permet de préciser en plus la hauteur du saut de ligne.

-Enfin, le document est terminé et envoyé au navigateur grâce à Output(). On aurait pu +Enfin, le document est terminé et envoyé au navigateur grâce à Output(). On aurait pu le sauvegarder directement dans un fichier en passant le nom souhaité.

@@ -90,5 +84,5 @@ ni avant, ni après (le moindre espace ou retour-chariot compte). Si vous envoyez des données avant, vous obtiendrez le message : "Some data has already been output to browser, can't send PDF file". Si vous en envoyez après, il se peut que le navigateur affiche une page blanche. - - + + diff -urN fpdf153.orig/tutoriel/tuto2.htm fpdf153/tutoriel/tuto2.htm --- fpdf153.orig/tutoriel/tuto2.htm Thu Dec 30 20:45:58 2004 +++ fpdf153/tutoriel/tuto2.htm Tue Aug 15 13:52:48 2006 @@ -1,44 +1,81 @@ - - - -En-tête, pied de page, saut de page et image - - - -

En-tête, pied de page, saut de page et image

+ + + + +En-tête, pied de page, saut de page et image + + + +

En-tête, pied de page, saut de page et image

Voici un exemple de deux pages avec en-tête, pied de page et logo : -
-
-
- -<?php
require('fpdf.php');

class
PDF extends FPDF
{
//En-tête
function Header()
{
    
//Logo
    
$this->Image('logo_pb.png',10,8,33);
    
//Police Arial gras 15
    
$this->SetFont('Arial','B',15);
    
//Décalage à droite
    
$this->Cell(80);
    
//Titre
    
$this->Cell(30,10,'Titre',1,0,'C');
    
//Saut de ligne
    
$this->Ln(20);
}

//Pied de page
function Footer()
{
    
//Positionnement à 1,5 cm du bas
    
$this->SetY(-15);
    
//Police Arial italique 8
    
$this->SetFont('Arial','I',8);
    
//Numéro de page
    
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}

//Instanciation de la classe dérivée
$pdf=new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for(
$i=1;$i<=40;$i++)
    
$pdf->Cell(50,10,'Impression de la ligne numéro '.$i,0,1);
$pdf->Output();
?> -
-

- -Cet exemple exploite les méthodes Header() et Footer() pour traiter les en-têtes et + +Cet exemple exploite les méthodes Header() et Footer() pour traiter les en-têtes et pieds de page. Elles sont appelées automatiquement. Leur implémentation dans la classe FPDF est vide, aussi doit-on dériver la classe et les redéfinir.

-Le logo est imprimé grâce à la méthode Image() en précisant le coin supérieur gauche et +Le logo est imprimé grâce à la méthode Image() en précisant le coin supérieur gauche et la largeur. La hauteur est calculée automatiquement afin de respecter la proportion de l'image.

Pour imprimer le numéro de page, une valeur nulle est passée comme largeur de cellule. Cela signifie que cette dernière doit s'étendre jusqu'à la marge droite de la page ; c'est pratique -pour centrer du texte. Le numéro de page courant est retourné par la méthode PageNo() ; le +pour centrer du texte. Le numéro de page courant est retourné par la méthode PageNo() ; le nombre total de pages s'obtient quant à lui grâce à la valeur spéciale {nb} qui sera substituée lorsque le document sera terminé (à condition d'avoir au préalable appelé -AliasNbPages()). +AliasNbPages()).
-A noter l'utilisation de la méthode SetY() qui permet de se +A noter l'utilisation de la méthode SetY() qui permet de se positionner de manière absolue dans la page, à partir du haut ou du bas.

@@ -47,6 +84,6 @@ et la police est restaurée. Bien que l'en-tête et le pied de page spécifient leur propre police (Arial), le corps de la page continue en Times. Ce principe de restauration automatique s'applique aussi à l'épaisseur des traits et aux couleurs. Le seuil de déclenchement du saut -de page se règle avec SetAutoPageBreak(). - - +de page se règle avec SetAutoPageBreak(). + + diff -urN fpdf153.orig/tutoriel/tuto2.php fpdf153/tutoriel/tuto2.php --- fpdf153.orig/tutoriel/tuto2.php Thu Dec 30 20:45:58 2004 +++ fpdf153/tutoriel/tuto2.php Tue Aug 15 13:52:48 2006 @@ -36,6 +36,6 @@ $pdf->AddPage(); $pdf->SetFont('Times','',12); for($i=1;$i<=40;$i++) - $pdf->Cell(50,10,'Impression de la ligne numéro '.$i,0,1); + $pdf->Cell(0,10,'Impression de la ligne numéro '.$i,0,1); $pdf->Output(); ?> diff -urN fpdf153.orig/tutoriel/tuto3.htm fpdf153/tutoriel/tuto3.htm --- fpdf153.orig/tutoriel/tuto3.htm Thu Dec 30 20:45:58 2004 +++ fpdf153/tutoriel/tuto3.htm Tue Aug 15 13:52:48 2006 @@ -1,47 +1,126 @@ - - - -Retour du texte à la ligne et couleurs - - - -

Retour du texte à la ligne et couleurs

+ + + + +Retour du texte à la ligne et couleurs + + + +

Retour du texte à la ligne et couleurs

Voici pour continuer un exemple imprimant des paragraphes de texte justifié. Il illustre également l'utilisation des couleurs. -
-
-
- -<?php
require('fpdf.php');

class
PDF extends FPDF
{
function
Header()
{
    global
$titre;

    
//Arial gras 15
    
$this->SetFont('Arial','B',15);
    
//Calcul de la largeur du titre et positionnement
    
$w=$this->GetStringWidth($titre)+6;
    
$this->SetX((210-$w)/2);
    
//Couleurs du cadre, du fond et du texte
    
$this->SetDrawColor(0,80,180);
    
$this->SetFillColor(230,230,0);
    
$this->SetTextColor(220,50,50);
    
//Epaisseur du cadre (1 mm)
    
$this->SetLineWidth(1);
    
//Titre centré
    
$this->Cell($w,9,$titre,1,1,'C',1);
    
//Saut de ligne
    
$this->Ln(10);
}

function
Footer()
{
    
//Positionnement à 1,5 cm du bas
    
$this->SetY(-15);
    
//Arial italique 8
    
$this->SetFont('Arial','I',8);
    
//Couleur du texte en gris
    
$this->SetTextColor(128);
    
//Numéro de page
    
$this->Cell(0,10,'Page '.$this->PageNo(),0,0,'C');
}

function
TitreChapitre($num,$lib)
{
    
//Arial 12
    
$this->SetFont('Arial','',12);
    
//Couleur de fond
    
$this->SetFillColor(200,220,255);
    
//Titre
    
$this->Cell(0,6,"Chapitre $num : $lib",0,1,'L',1);
    
//Saut de ligne
    
$this->Ln(4);
}

function
CorpsChapitre($fichier)
{
    
//Lecture du fichier texte
    
$f=fopen($fichier,'r');
    
$txt=fread($f,filesize($fichier));
    
fclose($f);
    
//Times 12
    
$this->SetFont('Times','',12);
    
//Sortie du texte justifié
    
$this->MultiCell(0,5,$txt);
    
//Saut de ligne
    
$this->Ln();
    
//Mention en italique
    
$this->SetFont('','I');
    
$this->Cell(0,5,'(fin de l\'extrait)');
}

function
AjouterChapitre($num,$titre,$fichier)
{
    
$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();
?> -
-

- -La méthode GetStringWidth() permet de déterminer la longueur d'une chaîne dans la police + +La méthode GetStringWidth() permet de déterminer la longueur d'une chaîne dans la police courante, ce qui est utilisé ici pour calculer la largeur du cadre entourant le titre. Puis -les couleurs sont définies (via SetDrawColor(), SetFillColor() et SetTextColor()) -et l'épaisseur du trait positionnée à 1 mm (contre 0,2 par défaut) grâce à SetLineWidth(). +les couleurs sont définies (via SetDrawColor(), SetFillColor() et SetTextColor()) +et l'épaisseur du trait positionnée à 1 mm (contre 0,2 par défaut) grâce à SetLineWidth(). Il ne reste alors plus qu'à imprimer la cellule pour le titre (le dernier paramètre à 1 indique que le fond doit être coloré).

-La méthode permettant d'imprimer les paragraphes est MultiCell(). A chaque fois qu'une +La méthode permettant d'imprimer les paragraphes est MultiCell(). A chaque fois qu'une ligne arrive à l'extrémité droite de la cellule ou qu'un caractère de retour-chariot est rencontré, un saut est effectué et une nouvelle cellule automatiquement créée sous la précédente. Le texte est justifié par défaut.

-Deux propriétés du document sont positionnées : le titre (SetTitle()) et l'auteur -(SetAuthor()). Les propriétés sont visibles de deux manières différentes. En ouvrant +Deux propriétés du document sont positionnées : le titre (SetTitle()) et l'auteur +(SetAuthor()). Les propriétés sont visibles de deux manières différentes. En ouvrant directement le document avec Acrobat Reader, en allant dans le menu Fichier, Informations sur le document, option Générales. Seconde méthode, accessible aussi à partir du plug-in, cliquer sur le triangle juste au-dessus de la barre de défilement de droite et sélectionner Informations sur le document. - - + + diff -urN fpdf153.orig/tutoriel/tuto4.htm fpdf153/tutoriel/tuto4.htm --- fpdf153.orig/tutoriel/tuto4.htm Thu Dec 30 20:45:58 2004 +++ fpdf153/tutoriel/tuto4.htm Tue Aug 15 13:52:48 2006 @@ -1,34 +1,143 @@ - - - -Multi-colonnes - - - -

Multi-colonnes

+ + + + +Multi-colonnes + + + +

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',1);
    
$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,$lib)
{
    
//Titre
    
$this->SetFont('Arial','',12);
    
$this->SetFillColor(200,220,255);
    
$this->Cell(0,6,"Chapitre $num : $lib",0,1,'L',1);
    
$this->Ln(4);
    
//Sauvegarde de l'ordonnée
    
$this->y0=$this->GetY();
}

function
CorpsChapitre($fichier)
{
    
//Lecture du fichier texte
    
$f=fopen($fichier,'r');
    
$txt=fread($f,filesize($fichier));
    
fclose($f);
    
//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();
?> -
-

- -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()), + +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. - - + + diff -urN fpdf153.orig/tutoriel/tuto5.htm fpdf153/tutoriel/tuto5.htm --- fpdf153.orig/tutoriel/tuto5.htm Thu Dec 30 20:45:58 2004 +++ fpdf153/tutoriel/tuto5.htm Tue Aug 15 13:52:48 2006 @@ -1,27 +1,124 @@ - - - -Tableaux - - - -

Tableaux

+ + + + +Tableaux + + + +

Tableaux

Ce tutoriel montre comment réaliser des tableaux simplement. -
-
-
- -<?php
require('fpdf.php');

class
PDF extends FPDF
{
//Chargement des données
function LoadData($file)
{
    
//Lecture des lignes du fichier
    
$lines=file($file);
    
$data=array();
    foreach(
$lines as $line)
        
$data[]=explode(';',chop($line));
    return
$data;
}

//Tableau simple
function BasicTable($header,$data)
{
    
//En-tête
    
foreach($header as $col)
        
$this->Cell(40,7,$col,1);
    
$this->Ln();
    
//Données
    
foreach($data as $row)
    {
        foreach(
$row as $col)
            
$this->Cell(40,6,$col,1);
        
$this->Ln();
    }
}

//Tableau amélioré
function ImprovedTable($header,$data)
{
    
//Largeurs des colonnes
    
$w=array(40,35,45,40);
    
//En-tête
    
for($i=0;$i<count($header);$i++)
        
$this->Cell($w[$i],7,$header[$i],1,0,'C');
    
$this->Ln();
    
//Données
    
foreach($data as $row)
    {
        
$this->Cell($w[0],6,$row[0],'LR');
        
$this->Cell($w[1],6,$row[1],'LR');
        
$this->Cell($w[2],6,number_format($row[2],0,',',' '),'LR',0,'R');
        
$this->Cell($w[3],6,number_format($row[3],0,',',' '),'LR',0,'R');
        
$this->Ln();
    }
    
//Trait de terminaison
    
$this->Cell(array_sum($w),0,'','T');
}

//Tableau coloré
function FancyTable($header,$data)
{
    
//Couleurs, épaisseur du trait et police grasse
    
$this->SetFillColor(255,0,0);
    
$this->SetTextColor(255);
    
$this->SetDrawColor(128,0,0);
    
$this->SetLineWidth(.3);
    
$this->SetFont('','B');
    
//En-tête
    
$w=array(40,35,45,40);
    for(
$i=0;$i<count($header);$i++)
        
$this->Cell($w[$i],7,$header[$i],1,0,'C',1);
    
$this->Ln();
    
//Restauration des couleurs et de la police
    
$this->SetFillColor(224,235,255);
    
$this->SetTextColor(0);
    
$this->SetFont('');
    
//Données
    
$fill=0;
    foreach(
$data as $row)
    {
        
$this->Cell($w[0],6,$row[0],'LR',0,'L',$fill);
        
$this->Cell($w[1],6,$row[1],'LR',0,'L',$fill);
        
$this->Cell($w[2],6,number_format($row[2],0,',',' '),'LR',0,'R',$fill);
        
$this->Cell($w[3],6,number_format($row[3],0,',',' '),'LR',0,'R',$fill);
        
$this->Ln();
        
$fill=!$fill;
    }
    
$this->Cell(array_sum($w),0,'','T');
}
}

$pdf=new PDF();
//Titres des colonnes
$header=array('Pays','Capitale','Superficie (km²)','Pop. (milliers)');
//Chargement des données
$data=$pdf->LoadData('pays.txt');
$pdf->SetFont('Arial','',14);
$pdf->AddPage();
$pdf->BasicTable($header,$data);
$pdf->AddPage();
$pdf->ImprovedTable($header,$data);
$pdf->AddPage();
$pdf->FancyTable($header,$data);
$pdf->Output();
?> -
-

- + Un tableau n'étant qu'un ensemble de cellules, il est naturel de les construire à partir de ces dernières. Le premier est réalisé de la manière la plus élémentaire qui soit : de simples cellules encadrées, toutes de la même taille et alignées à gauche. Le résultat est @@ -30,7 +127,7 @@
Le deuxième tableau apporte quelques améliorations : chaque colonne a sa propre largeur, les titres sont centrés et les nombres cadrés à droite. De plus, les traits horizontaux ont été -enlevés. Ceci est réalisé grâce au paramètre border de la méthode Cell(), qui +enlevés. Ceci est réalisé grâce au paramètre border de la méthode Cell(), qui permet de spécifier quels bords de la cellule doivent être tracés. Dans le cas présent, on désire les bords gauches (L) et droits (R). Reste le problème du trait horizontal final pour refermer le tableau. Il y a deux possibilités : soit tester dans la @@ -43,5 +140,5 @@ de préciser les couleurs de fond, de texte et de trait souhaitées. L'alternance de couleur pour les lignes est obtenue en utilisant des cellules à fond alternativement coloré et transparent. - - + + diff -urN fpdf153.orig/tutoriel/tuto6.htm fpdf153/tutoriel/tuto6.htm --- fpdf153.orig/tutoriel/tuto6.htm Thu Dec 30 20:45:58 2004 +++ fpdf153/tutoriel/tuto6.htm Tue Aug 15 13:52:48 2006 @@ -1,29 +1,147 @@ - - - -Liens et texte en mode flot - - - -

Liens et texte en mode flot

+ + + + +Liens et texte en mode flot + + + +

Liens et texte en mode flot

Ce tutoriel explique comment insérer des liens (internes et externes) et montre un nouveau mode d'écriture du texte. Il contient également un parseur HTML rudimentaire. -
-
-
- -<?php
require('fpdf.php');

class
PDF extends FPDF
{
var
$B;
var
$I;
var
$U;
var
$HREF;

function
PDF($orientation='P',$unit='mm',$format='A4')
{
    
//Appel au constructeur parent
    
$this->FPDF($orientation,$unit,$format);
    
//Initialisation
    
$this->B=0;
    
$this->I=0;
    
$this->U=0;
    
$this->HREF='';
}

function
WriteHTML($html)
{
    
//Parseur HTML
    
$html=str_replace("\n",' ',$html);
    
$a=preg_split('/<(.*)>/U',$html,-1,PREG_SPLIT_DELIM_CAPTURE);
    foreach(
$a as $i=>$e)
    {
        if(
$i%2==0)
        {
            
//Texte
            
if($this->HREF)
                
$this->PutLink($this->HREF,$e);
            else
                
$this->Write(5,$e);
        }
        else
        {
            
//Balise
            
if($e{0}=='/')
                
$this->CloseTag(strtoupper(substr($e,1)));
            else
            {
                
//Extraction des attributs
                
$a2=explode(' ',$e);
                
$tag=strtoupper(array_shift($a2));
                
$attr=array();
                foreach(
$a2 as $v)
                    if(
ereg('^([^=]*)=["\']?([^"\']*)["\']?$',$v,$a3))
                        
$attr[strtoupper($a3[1])]=$a3[2];
                
$this->OpenTag($tag,$attr);
            }
        }
    }
}

function
OpenTag($tag,$attr)
{
    
//Balise ouvrante
    
if($tag=='B' or $tag=='I' or $tag=='U')
        
$this->SetStyle($tag,true);
    if(
$tag=='A')
        
$this->HREF=$attr['HREF'];
    if(
$tag=='BR')
        
$this->Ln(5);
}

function
CloseTag($tag)
{
    
//Balise fermante
    
if($tag=='B' or $tag=='I' or $tag=='U')
        
$this->SetStyle($tag,false);
    if(
$tag=='A')
        
$this->HREF='';
}

function
SetStyle($tag,$enable)
{
    
//Modifie le style et sélectionne la police correspondante
    
$this->$tag+=($enable ? 1 : -1);
    
$style='';
    foreach(array(
'B','I','U') as $s)
        if(
$this->$s>0)
            
$style.=$s;
    
$this->SetFont('',$style);
}

function
PutLink($URL,$txt)
{
    
//Place un hyperlien
    
$this->SetTextColor(0,0,255);
    
$this->SetStyle('U',true);
    
$this->Write(5,$txt,$URL);
    
$this->SetStyle('U',false);
    
$this->SetTextColor(0);
}
}

$html='Vous pouvez maintenant imprimer facilement du texte mélangeant
différents styles : <B>gras</B>, <I>italique</I>, <U>souligné</U>, ou
<B><I><U>tous à la fois</U></I></B> !<BR>Vous pouvez aussi insérer des
liens sous forme textuelle, comme <A HREF="http://www.fpdf.org">
www.fpdf.org</A>, ou bien sous forme d\'image : cliquez sur le logo.'
;

$pdf=new PDF();
//Première page
$pdf->AddPage();
$pdf->SetFont('Arial','',20);
$pdf->Write(5,'Pour découvrir les nouveautés de ce tutoriel, cliquez ');
$pdf->SetFont('','U');
$link=$pdf->AddLink();
$pdf->Write(5,'ici',$link);
$pdf->SetFont('');
//Seconde page
$pdf->AddPage();
$pdf->SetLink($link);
$pdf->Image('logo.png',10,10,30,0,'','http://www.fpdf.org');
$pdf->SetLeftMargin(45);
$pdf->SetFontSize(14);
$pdf->WriteHTML($html);
$pdf->Output();
?> -
-

- -La nouvelle méthode pour imprimer du texte est Write(). Elle est très proche de MultiCell() ; + +La nouvelle méthode pour imprimer du texte est Write(). Elle est très proche de MultiCell() ; les différences sont les suivantes :