You are on page 1of 4

o

PHPet PDF,
toufoursplusintimes.
Premièrepartier FPDF.
La sociétéde l'information
étaitsenséenouslibérer
du règnedu papier. A l'usage,
ofl constatequ'iln'en
estrien.Nousallonsdécortiquer le mariage
réussit
entrele formatPDFet PHP. Par Gauthier Delamarre

L e m a r c h é d e I ' i m p r e s s i o ns e utilisateurs potentiels, si courageux


porte toujourstrès bien. Internet soient-ilsface aux problèmesposés par
est en partieresponsablede cela, I'installation.
tant la massed'informationsdis- S i à c e t t e é p o q u eI ' e m p l o d i e modules
p o n i b l ei n c i t e l e s v i s i t e u r sà i m p r i m e r externes,écritsen C, donc compiléset
t o u j o u r sp l u s d e c o n t e n u s .E t l e c o m - performants,s'avéraitquasi indispen-
merce en ligne n'est pas en reste,car sable, la puissance des machines
chaque commande, chaque facture aujourd'hui disponibles permet de
appelleà des impressionsmultiples: le recourir sans danger à des classes
b o n d e c o m m a n d ed u c l i e n t . l e écritesdirectementen PHP.Cela offre
b o n d e c o m m a n d eà l ' a t t e n - deux avantagesmajeurs : d'une part,
tion du fournisseur.les fac- I installation en est infinimentsimplifiée,
tures correspondantes, d ' a u t r ep a r t ,l e s m o d i f i c a t i o nqs u e l ' o n
etc. La problématique peut faire sur ces librairiessont prises
n'est donc plus de se en compte instantanément, sans
demandercommentévi- r e c o m p i l a t i o ne t r é i n s t a l l a t i o nd u d i t
t e r d ' i m p r i m e cr e s d o c u - module.
ments, mais comment les V o i l à p o u r q u o in o u s a v o n s c h o i s i d e
i m p r i m e ra u m i e u x .U n e f o i s vous présenterFPDF (dans le présent
e n c o r e ,P H P p r o p o s ed e s s o l u - article)et EzPDF(dans le numéropro-
tions efficaces, rapides et peu oné- chain),qui sont toutesdeux de simples
reuses.Nousallonsen voir deux dans le classesPHB distribuéeslibrement. Cela
détaildans une sériede deux articles. autoriseà penserque I'immensemajori-
té des développeursaura le loisir de
pouvoirutiliserces produits,quelleque
Un peu d'histoire soit leur plate-formede développement.
L e m a r i a g ed e P H P e t P D F n ' e s t p a s
r é c e n t .l l s ' a g i tm ê m ed ' u n c o u p l ed é j à
rodé depuispas mal de temps. Le pro- Présentation
blèmeétantqu'au début de cette union, Les deux solutionsque nous allonsvoir
les outils à mettreen oeuvrese présen- ne sont pas identiques.Les différences
taientsous forme de modulesde l'inter- ne sont pas tellementtechniques,car
préteur,fastidieux à installer,surtout les résultatssont similairesen termede
l o r s q u el ' o n e s t p a s a d m i n i s t r a t e udru poids de documentscommede qualité,
s e r v e u rQ . u i p l u s e s t , l a s e u l el i b r a i r i e car le format PDF est parmi les plus
pleinementexploitableétait la libpdfde standardisésqui soient, grâce en soit
le lecteur PDF le plus Thomas Merz, dont le coût de licence rendueà Adobe,son créateur!
rapide sous GNU/Linux pouvait découragerdéfinitivementles C'estdonc dans la philosophie d'utilisa-

Linux Loader N'20


le site officiel
de FPDF

Qu'esl-c. qqo FPDF ?


â*stt

lIr{rlrilrl..qiltii{Jilræ'idre9èncre.dFlÉhe*{.tëirÀrrri+'lclttdrc5an-,rûr',3'iôlî'àJr,:lX.Èlrrearrarq,Æl)()'tôcaF.rv,f 61 r(dt
latfrhffi -
dLr',,{Ë13:51c'cd c:ÉaF'tr€ifct,cc v.r,er\tèlj:rr,r,(€,y&i(,odd.'co,F':r}-.rb€-!s._.
fu'adÈl!
f PDF a d.Lte< ulatte-. ic: brcbt- ôc phrr n.rl Nr.ù- I R-- Fe 1ïe ce çe< pntrrpac< tf,r-on-;&tr
Mwtl
. afd, a€5 Jifi: :- s,il o.s F4es s oes ma.æi l e p r e m i e rd e s s e p t t u t o r i e l sp r é s e n t s
. .r: ,: tr dp\ el rse- i j ?Ci + .,qe
.
.
.;u le rdg€ Fjs
làr lr ;a è'(-
J,j4
ùti ?t rr'' fréuo,
s u r l e s i t e ( a i n s iq u e d a n s l ' a r c h i v e ) .
sdB -i4a. 2'.i f 2,(,,
Celui-cimontreun exemoleminimaliste
Fffi :i,s:'''
lb,
. i.,i.rt{o? }f,r:E
_
e-,Fqrpcr d e c r é a t i o nd e d o c u m e n t ,a g r é m e n t e r
. '.f : *fe:

du fameux" HelloWorld! " :


c4'.) t:!cr

ÉPftÊ 1rle.p j.eér:.ikr-s iI i:!ilr7tltp(rq fi{.1f làJcirje !:f_rigrrcninilod!È:æf €r..Êr:,f,,ir_.è,f ht45onrêgÀt?,:Érrctrgsoic<rlaiæ31

te5'./.,rt_r:.\esrr'hi,r'&,rerltn{)È,çrgc1e-d2û.a\,sl6.r4iJrrrÀrro,,enlgrrâ:o,.Fçr€È\r.:eêcræ&,!Ëchâ,gc,,ÉilrJLânÉrrturË+

consei{?Js(elat,)hi:ccÈr):r:cuc5ûon:etudPr?'€:ii{:cgLryr:r?.oulclnrraiRlerFârÉs,?-'!' <?php
define('FPDFFONTPATH','fonU');
Et les perfomaocos ?
require('tpdf.php');
llaù'.ler4a'c::-.è;'ros,cr.LdocurEnE:!{1F,Rec!È,e.FIFil,:sperdurLl?:à^Lr3ebilrsseiËe!ù!rd:morbtedc6d?il63hptsddci
aôi  -.çral 1r4 icr (a:i:Cclrr rè i0 €d pôfiCuibt!â-d af, -{ra1Ê i ô I C!.oa
Spdf=newFPDF$;
L€e ivolutlons
Spdt->0pen0;
$pdf->AddPage0;
$pdf->SetFont(tArial',' B',16)1
Spdf->Cell(40,1 0,'HelfoWorld!');
Spdf->Output$;
?>
t i o n q u e n o u s t r o u v e r o n sd e s d i f f é - caractères: Vous n'avez plus qu'a pointervotre
r e n c e sn o t a b l e s .E n s u b s t a n c e ,n o u s define(tFPDFFOI{TPATH','/opUfpdf/font,); navigateur sur ce script ("
p o u v o n sd i r eq u e F P D Fe s t p l u s l i m i t é e tutoriel/tuto'1.php ") pour voir apparaître
d a n s l e n o m b r ed e f o n c t i o n sc o m m e ll suffira ensuite d inclure le fichier un document pris en charge par votre
d a n s l e n o m b r ed e f o n c t i o n n a l i t é sc ,e f p d f . p h pp o u r c h a r g e rl a l i b r a i r i ec o m - l e c t e u r P D F h a b i t u e l ,e t a r b o r a n t u n
q u i l a r e n dp l u ss i m p l eà a p p r é h e n d eert plète: magnifique " H e l l oW o r l d " d a n sl e c o i n
plus rapideà maîtriserqu EzPDF.Cette require'/opUf pdflfpdf.php' ; supérieurgauche.
d e r n i è r e ,e n r e v a n c h e ,o f f r e p l u s d e Les instructionsemployéesici sont rela-
f o n c t i o n sd e " h a u t - n i v e a"u, e t p e r m e t V o u sê t e s p r ê t sm a i n t e n a nàt t r a v a i l l e r tivement simples, mais nous allons
d e r é a l i s e rp l u s a i s é m e n td e s d o c u - sur votre premierdocumentPDF ! Pour cependantles détaillercar ellesprésen-
m e n t sp l u s c o m p l e x e s m , a i s a p r è su n commencer,nous allonsnous basersur t e n t à e l l e ss e u l e sl a o u a s i t o t a l i t éd u
t e m p s d ' a p p r e n t i s s a g eu n p e u p l u s
rong. - E i t

l.cu_11T_if-T_1ryi9,"_$l.lge_,:_9_t11q_o't''e,,*o"-l-llc'rnûde
r.'- i) .i q.s -, ir
. , : r jl , r é _ ! l _ , ; , : r , !- i l ' _ _ _ . . _ .
FPDF- Premiercontact I g) UBL /rlnnp/,rmvrvaderber,dproducts/acrobæ/acro-adhml
l i:!yly:::t::3lt:_'_11'j::gta_y_
Y8_' ;; f ifi
_--__-__=
Avant de passer aux exercices pra-
t | I| Frdæe
Frdæe -
t i q u e s ,f a i s o n sp l u sa m p l ec o n n a i s s a n - {\
f a \

ce avec FPDF.Nousdevonscette clas- Llobt


doÛt ?!o.j!il',
n-r-lIII|IlllII
\LlrJhir)t slpp,rt Adr{,!.n
A1Iqs.1 Àdl}ôc1Fltw
Àd1)ôc1F!tw

s e à O l i v i e rP l a t h e y ,q u i e n a l i v r é l a
p r e m i è r ev e r s i o ni l y a u n p e u p l u s d e
d e u x a n s .V o u sp o u r r e zt r o u v e rl a d e r -
n i è r e v e r s i o n s u r l e s i t e o f fi c i e l :
w w w f p d f. o r g ( l a v e r s i o n p r é s e n t é e
d a n s c e t a r t i c l ee s t l a 1 . 5 1 ) U . n mot au
sujetde la licencede FPDF: bienque la
licencementionnée dans le fichiersour-
c e s o i t " f r e e w a r e" , l ' a u t e u ro r é c i s e
q u ' i le s t p o s s i b l ed ' u t i l i s eer t d e m o d i -
f i e r à l o i s i rs a c l a s s e ,s a n s l i m i t a t i o n
q u e l c o n q u eC. e l ar e s s e m b l e doncplus
à d u d o m a i n ep u b l i cq u ' à d u f r e e w a r el l.
e s t d o n c p o s s i b l ed e m p l o y e r F P D F
d a n s u n p r o j e tc o m m e r c i adl e m a n i è r e
parfaitementlégale.
L i n s t a l l a t i oens t s i m p l i s s i m e : décom-
pressezI archiven'impodeou sur votre créateurdu
d i s q u ed u r ,c e l a n ' a p a s d i m p o r t a n c e . format PDF,
V o u s n ' a u r e z q u u n e d é c l a r a t i o nd e Adobe n'a
constanteà fairedans vos scriptspour pas fini de
s p é c i f i eIr' e m p l a c e m e nd te s p o l i c e sd e l'exploiter!

Linux Loader N"20


ErE hFery att lF lwran (l|ÊÉrÉI@ Fahts
notre exemple
1â{ ,i (f .91i,} r't ,i '"h mrri.#!9+ t + , I , I en action vacancedsicount.com utiliseFPDFpour
â {:l:l-1
!i LQt:; ah+rÉffirrDtl5t/trddluolrb t E
la créationdes bons de commandeet
autresdocumentsà télécharger
l{doWqlrl I
t Sq Ælch{. ,{.r ScÉr Ouir F.oat &.
I s / e ô - e r L t' : frù a, . illrlr ËI rE{n 4:: T
D (8L|j ahFJtt nvæGld(on.m/ E

YèCèN

T( GIT€
d-.
r frùffimaÉ!Ên.€F.rryt
*t stùFF€aqGaD|tqfit
(lt;. d-rffiJffirffirFtq
procédéde créationde documentsPDF ! Gtla.
ÊtÇ
q. t;
$pdf=newFPDFQ; rq.
5
|Foffi-r lfr

Ë
trill
I-
t PsrçP ffi
Pas de mystèreautour de cette instruc- rË

tion, il s'agit simplementd'initialiserun fr6Frc

objet FPDF,en conservant les valeurs


par défaut des argumentsattenduspar I
le constructeur. Vous pouvez en i{.';iil;;;ff;mi--trF: - - -' I ffi-**
ùin,*rmû; I
tt-ffiM&) I
revancheavoir besoin de spécifierdes .t-ût ytry
lO
optionsparticulières pour un document. -Errr0@
ù@Eæùæ' I

Les paramètrespossiblessont : tl
El i Hffi,:Ef I
&ffi-æâbô
raË;-.;ié;i,,nriÈJ : #''-'*-'
FPDF([stringorientation[, string unit [,
rI
I - ^ E4&ùtuÊd

mixed formatlll); - k l
!

L'orientationpeut prendredeux valeurs


: " P " pour poftrait ou " L " pour paysa-
ge. La valeur par défaut est " P ". Notez ment. ll ne faut en revanchequ'une riel/tuto2.php".
qu'il est possiblede redéfinirl'orienta- seule fois, avant tout appel de
tion de chaque page du document.La AddPage$. Cette dernière ajoute effec- Note : Si vous souhaitez revenir en
valeur passée au constructeur servira tivement une nouvellepage. Un argu- arrière dans votre document, vous le
de valeur par défaut à la méthode ment optionnelpermetde forcer I'orien- pouvez en modifiant la propriété
AddPage$,que nous verrons ultérieure- tation de la page, avec par exemple $this->page de votre objet. Par
ment. AddPage("L ") pour insérerune page contre, il faut penser à bien enregis-
L'unité(unit)qu'il est possiblede fixer en paysage. trer la page courante pour pouvoir s'y
ici concerneratoutes les fonctionspour La méthode AddPageQest très impor- replacer après. Cela est très utile
lesquellesune distanceest attendueen tante, car son appel est obligatoirepour pour écrire un sommaire par
paramètre.Les valeurs possibles sont : génèrer un document valide et exemple.
" m " pour millimètre," cm " pour centi- déclenchel'exécutionde deux autres <?
mètre," pt " pour point, et " in " pour méthodes : FooterQet HeaderQ.La pre- $pagecounnte= $pdf->page;
pouce. La valeur par défaut est " mm ". mière n'est appelée qu'à partir de la $pdf->page= t;
Enfin, le format de la page peut être deuxièmeinstructionAddPagefl.Pour $pûf->Gell(2s,1 d'unepage
0,"lulodiflcation
précisé.Vous pouvez ici soit utiliserune bien utiliser ces méthodes appelées anÉrieurc")1
chaîne de caractère pour désigné un automatiquement,qui correspondent $pdf->page= $pageGourante; // pourcuite
(
format reconnu par FPDF(parmi A3 "D respectivementau pied-de-page et à de la consùuclion du document.
44 ":'A5 "," Lgttgr" ou " Legal"), soit I'en-tête, il est préférablede dérivé la ?>
passer un tableau de deux valeurs classe FPDF plutot que de la modifier $pdf->SetFont('Arial','B',16);
(expriméesdans I'unité précisée au directement:
paramètre précédent),pour définir un <?
format personnalisé. c-lassPDFexhnds FPDFI La gestion des polices
Nous voici arrivésà un autre point très
Exemple:$pdf=new luncûon Header()[ important : la gestion des polices. La
FPDF('P','in',array(10,20)); fonction SetFont$ est assez simple
Cette instruction créera un document l d'emploi.ll suffitde lui indiquerle nom
orienté en portrait, avec le pouce pour de la police à utiliset la variante(gras,
unité,et un format de 10 poucesde lar- funcûon FooterQt italique,souligné)et la taille.Un appel
geur pour 20 de hauteur. au moins de cette fonctionest obliga-
l toire avantde pouvoirimprimerdu texte
$pdf->Open0; l dans le document.
$pdf->AddPage0; $pdf = new PDF; Les policesfourniesavec l'archivede
Ces deux instructions permettent de ?> FPDFsont peu nombreuses,mais suffi-
commencer à travailler réellement le sent dans la plupartdes cas. De plus, il
document.Open$n'attendaucun para- Pour un exemple montrant comment est possible d'embarquerdes fontes
mètre. Son appel est obligatoire pour utiliserces méthodesde numérotation TrueType(Windows) ou Typel (Unix).
pouvoir ajouter des pages au docu- des pages, consultezle fichier " tuto- Voici les fontes fournies : Courier.Arial
Une des ressourcesde la
sectionscriptsde fpdf.org
(Cellétendue)

trouvera à la position courante du ,,


pointeur". Après un appel à Addpagefl,
le pointeurest positionnédans le coin
supérieurgauche, en tenant compte
des marges(qui peuventêtre spécifiées
à l'aidede SetMarginQ).
Pour spécifierun emplacementprécis,
vous pouvez utiliser les méthodes
SetXYQ,SetXfl ou SetYfl. La première
attend deux arguments,chacune des
suivantesun seul : d'abord I'abscisse
puis I'ordonnéedans les deux cas. Les
valeurssont expriméesdans l,unitépar
défautdu document.Ainsi SetXy(2O,50)
d a n s u n d o c u m e n ta y a n t l e m i l l i m è t r e
pour unitéplacerale pointeurà 2 centi-
mètresdu bord gauche,et trois du bord
(ou Helvetica,elles sont identiques), AddFontQdétaillela façon de tes utiliser supérieur.Si une valeur négativeest
Times, Symbol, ZapfDingBats. Ces dans vos scripts. passée,le poiteursera positionnépar
deux dernières sont des polices de $pdf->Cell(40,1O,"HelloWorld ! ,,); rapportau bord opposé.
symboles uniquement. Seules les
fontes textuelles(les trois premières
Voyonsmaintenantles argumentsde la
donc) peuventêtre mises en gras, ita- La méthodecettll méthodeCellQ:
lique, et/ou souligné.pour ce faire, il La méthode Cell0 est l'une des diffé-
faut simplementfourniren secondpara- rentesfonctionspermettantd'imprimer Cell(floatw [, float h [, stringtxt [, mixed
mètre une chaînede caractèrescombi- du texte dans le document.Avec CellQ, border [, int In [, string align [, int fill [,
nant les lettressuivantes(l'ordren,im- le texte est placé dans une cellule, mixed tint<lllllll)
porte pas) : " B " pour gras, ,, | ,, pour comme son nom le laisse suggérer,
italiqueet " U " poursouligné. Cela permet un positionnementplus
Exemple: " Bl " pour gras et souligné,,,
Ul " pour italiqueet souligné,,, U ,, pour
précis du texte qu'avec la fonction Pourconcturecette
WriteQ (que vous pourrez découvrir
souligné,etc. dans le manuel).Mais avant d,en
premièrepartie
Enfin,il est possiblede spécifierla taille détaillerles arguments,il est important En jouant avec ces valeurs,vous trou-
de la fonte avec le troisièmeparamètre, de considérer la manière dont sont verez rapidementcomment effectuer
Celle-ci est toujours exprimée en positionnésles élémentsdans un docu- les mises en pages qui vous convien-
p o i n t s ,q u e l l eq u e s o i t I ' u n i t éc h o i s i e ment PDF. n e n t . M a i s n ' o u b l i e zp a s d e s u i v r el e
pour le documentavec le constructeur. Dans la plupart des cas, les éléments tutoriel fournit avec la classe,qui est
ll est égalementpossiblede recourirà doivent être placés selon des coordo- assezcoud maistrès bien fait, ainsique
SetFontSizeQ pour ne modifierque la nées précises, ayant pour origine le le manuel,qui vous sera indispensable
taillede la policecourante,sans répéter c o i n s u p é r i e u rg a u c h e d u d o c u m e n t . pour découvrir les autres fonctions
les deux premiersparamètres.La taille Les ordonées croissantesvont vers le misesà votre dispositionpar FpDF.
de police ne doit pas forcémentêtre un bas, les abscissesvers la droite. Un
entier : la valeur 8.5 est parfaitement appel à Cellflplacerala cellulede teile
valide. façon que son coin supérieurgauchese

Note : le nom de la police ainsi que ta


taille prennent par défaut la valeur w: largeur
delacellule. Elleinflue à lafoissurl'alignement dutexteetsurlaposition dupointeur
cgurante après
courante. Un appel à SetFont(FALSE) impressiondutexte.
Elleestexprimée pardéfaut.
dansI'unité
; revient donc à supprimer les h: hauteur
delacellule.lmplications identiquesà w,hormiscequiconcerne I'alignementdutexte.
variantes (gras, italique ou souligné) brt : lachaîne
à imprimer.Attention, ellenepeutpascontenir deretour pourplacer
à laligne(ilssontignorés), dutexte
de la police courante. Si la taille n'a surplusieurs
tignes,
il faututiliser
Multi0ellfl
(voirmanuel).
jamais été réglée, la valeur par défaut boder : détermine lecadre
à dessiner autour delacellule.Siborder= TRUE, lesquatres cotésseront
dessinés.
Sinon,il est
est de 12 points. possible
depasserunechaîne composée d'unecombinaison deslettres " B,,pourbas,,,T,,pourhaut,
,,1,,pour
gaucheet" R" pourdroite.Parexemple, " LTR" dessinerauncadre partout saufau-dessous
pardéfaut delacellule.
Lavaleur
Pour intégrerdes polices personnali- estFALSE (pasdebodure). L'épaisseur
dutraitdoitêtrespécifiée partamétnoOâSettineWiOtnç.
sées,il faut employerle script ,, make- In: position
dupointeuraprès l'impression delacellule.0pour"à droit,,,1 p0ur,,à laligne,,ou
2 pour,,en-dessous
", Lavaleurpardéfaut est0,
font.php ", du sous-répertoire ,.
align: Alignementdutexte dans lacellule. " L" pouraligneràgauche, " R" pouraligneràdrgite,,,C,,pourcentrer.
font/makefont ". Le tutoriel '. La
valeurpardéfautest,,L,,.
tutoriel/tutoT.htm" vous donne la
fill : remplissagedelacellule.TRUE = remplissage,_FAlSE= pâsderemplissage. FALSE pardéfaut.
estlavaleur
marche à suivre pour convertir vos Lacou_
leurderemplissageestdéterminée parSetFillColorQ.
policesdans un format exploitablepar link : identifiant par
deliencréer Addlinkfl. Celapermet dedéfinir
lacible
d'unlieninterne audocument(voir
lemanuel),
la librairie,et la page de manuel sur

Linux Loader N'20

You might also like