Académique Documents
Professionnel Documents
Culture Documents
Introduccin
Qu es FPDF?
FPDF es una clase escrita en PHP que permite enerar !ocumentos PDF !irectamente !es!e P"P# es !ecir# sin usar la $i$lioteca PDFlib% La F !e FPDF si ni&ica Free ' ratis ( li$re)* pue!e uste! usarla para cualquier prop+sito ( mo!i&icarla a su usto para satis&acer sus necesi!a!es% FPDF tiene otras ,enta-as* &unciones !e alto ni,el% Esta es una lista !e sus principales caracter.sticas* Elecci+n !e la uni!a! !e me!i!a# &ormato !e p/ ina ( m/r enes 0esti+n !e ca$eceras ( pies !e p/ ina Salto !e p/ ina autom/tico Salto !e l.nea ( -usti&icaci+n !el te1to autom/ticos A!misi+n !e im/ enes '2PE0# PN0 ( 0IF) Colores Enlaces A!misi+n !e &uentes TrueT(pe# T(pe3 ( co!i&icaci+n Compresi+n !e p/ ina A4ora que (a sa$emos un poco !e lo $/sico acerca !e nuestra Li$rer.a con la cual tra$a-aremos a lo lar o !e este peque5o Tutorial# es 4ora !e empe6ar# para que el conteni!o sea $re,e ( lo m/s e1pl.cito posi$le se a5a!ir/n al unas im/ enes con e-emplos# se ui!os !e al unas !escripciones que e1plicaran en que consiste ca!a pro$lema o &unci+n que se utilice%
FPDF es una li$rer.a que si sa$es utili6arla# pue!e lle ar a ser mu( 7til# para al unas personas es !i&.cil# pero para otras es mas &/cil# 4a( que mencionar que FPDF no es la 7nica li$rer.a !isponi$le para po!er crear PDF !es!e P"P# 4a( !i,ersas li$rer.as# pero FPDF es una !e las m/s
utili6a!as# es por tanto lo que la 4ace una !e las m/s 7tiles 4asta la &ec4a%
Como se pue!e apreciar# solo es cuesti+n !e pe ar la carpeta en el !irectorio !e nuestro pro(ecto C%B A4ora lo 7nico que 4ace &alta es 4acer la re&erencia en el la clase que se encar ara !e enerar el PDF# Por recomen!aci+n# se aconse-a que para tra$a-ar con esta li$rer.a# se utilice solamente una clase la cual enerara el PDF# ( con la que pro ramaremos el &ormato !esea!o%
Da con los pasos anteriores reali6a!os# estamos listos para empe6ar a tra$a-ar% En mi caso mi clase que me enera el p!&# se llama gen_pdf.php.
Como (a 4a$.amos menciona!o# es necesario 4acer la re&erencia a nuestra carpeta !e una manera correcta# (a que !e otra &orma nos marcara un error# o simplemente no creara na!a% A4ora una $re,e e1plicaci+n so$re ca!a coman!o% DespuEs !e incluir el &ic4ero !e la clase# creamos el o$-eto FDPF% El constructor FPDF') se usa aqu. con sus ,alores por !e&ecto* las p/ inas son !e tama5o aF alar a!o ( la uni!a! !e me!i!a es el mil.metro% Se po!r.a 4a$er !eclara!o e1pl.citamente con*
$pdf = new FPDF('P','((','A4');
El comman!o A!!Pa e')# nos a5a!e una pa ina en $lanco a la instanciacion !e nuestro PDF
$pdf->AddPage();
Antes !e que po!amos imprimir te1to# es o$li atorio esco er una &uente con SetFont')# si no# el !ocumento no ser/ ,/li!o% Esco emos Arial en ne rita !e tama5o 3G*
$pdf->SetFont('Arial','B',16);
A4ora po!emos imprimir una cel!a con Cell')% Una cel!a es una super&icie rectan ular# con $or!e si se quiere# que contiene te1to% Se imprime en la posici+n actual% Especi&icamos sus !imensiones# el te1to
'centra!o o alinea!o)# si queremos !i$u-ar o no los $or!es# ( !+n!e se u$icar/ la posici+n actual !espuEs !e imprimir la cel!a 'a la !erec4a# !e$a-o o al principio !e la si uiente l.nea)% Para a5a!ir el $or!e# !e$eremos 4acer esto*
$pdf->Cell(40,10,' !ola" #$ndo%');
$this->SetFont('Arial','-',/); // :;(ero de p+gina $this->Cell(0,10,'Page '.$this->Page:o().'/<n)=',0,0,'C'); } } // Crea*i7n del o)>eto de la *la3e heredada $pdf = new PDF(); $pdf->Alia3:)Page3(); $pdf->AddPage(); $pdf->SetFont('4i(e3','',16); for($i=1;$i<=40;$i++) $pdf->Cell(0,10,'-(pri(iendo l5nea n;(ero '.$i,0,1); $pdf->&$tp$t(); ?'
Pero, Cmo es que unciona este cdigo? Este e-emplo 4ace uso !e los mEto!os Header!" y Footer!" para procesar las ca$eceras ( pies !e p/ inas% Se llaman autom/ticamente% Da e1isten en la clase FPDF ori inal# pero no 4acen na!a% Por ello# tenemos que 4ere!ar la clase ( so$rescri$irlos% El lo otipo se imprime con el mEto!o Image!" especi&ican!o su esquina superior i6quier!a ( su anc4ura% La altura se calcula autom/ticamente respetan!o las proporciones !e la ima en% Para imprimir el n7mero !e p/ ina# se le pasa un ,alor nulo 'null) como anc4o !e la cel!a% Eso si ni&ica que la cel!a se e1ten!er/ 4asta el mar en !erec4o !e la p/ inaI pue!e ser 7til centrar el te1to% El n7mero actual !e la p/ ina se !e,uel,e por el mEto!os Page#oI mientras que el n7mero total !e p/ inas se o$tiene me!iante un ,alor especial !e Jn$K que ser/ sustitui!o cuan!o se cierre el !ocumento 'suponien!o que uste! antes utili6ara $lias#bPages!"% O$ser,e el uso !el mEto!o &et'!" que le permite especi&icar la posici+n en una u$icaci+n a$soluta respecto !el ori en !e coor!ena!as !e la p/ ina# empe6an!o por el principio o por el &inal% Otra caracter.stica interesante se usa en el e-emplo* el salto autom/tico !e p/ ina% Tan pronto como una cel!a cru6a el l.mite m/1imo !e la p/ ina 'a ; cm !el &inal# por !e&ecto)# se e-ecuta un salto ( se recupera la &uente% Aunque la ca$ecera ( el pie usan su propia &uente 'Arial)# el cuerpo !el !ocumento continua con Times% Este mecanismo autom/tico !e recuperaci+n tam$iEn se aplica a los colores ( al anc4o !e l.nea% El l.mite que &uer6a los saltos !e p/ ina pue!e esta$lecerse
con &et$utoPage(rea)!"% Como po!emos apreciar en la Ima en# nuestro PDF 4a si!o crea!o%
Como se pue!e apreciar en el e-emplo !e la parte !e arri$a# tenemos una Funci+n llama!a *abla&im+le!", nosotros autom/ticamente le asi namos ca!a cel!a con su respecti,a &uente ( te1to# !e esta manera es como la 4acemos est/tica# (a que no cam$iar.amos nin 7n !ato
<
!entro !e ella% A4ora que (a tenemos nuestro crea!or !e la ta$la necesitamos enerar el !ocumento ( llamar a esta &unci+n
$pdfEneF PDF?@C //45t$lo3 de la3 *ol$(na3 $headerEarraG?'Col$(na 1'"'Col$(na 6'"'Col$(na 0'"'Col$(na 4'@C $pdfA'Alia3:)Page3?@C //Pri(era p+gina $pdfA'AddPage?@C $pdfA'Set9?61@C //$pdfA'AddPage?@C $pdfA'4a)laSi(ple?$header@C //Seg$nda p+gina $pdfA'AddPage?@C $pdfA'Set9?61@C $pdfA'4a)laColore3?$header@C $pdfA'&$tp$t?@C ?'
A4ora pasaremos a 4acer una ta$la enera!a por FPDF# !e manera Dinmica. Cul es la Di erencia entre -statica y Dinmica?
De la manera Est/tica# solamente creamos una ta$la con un te1to que nosotros po!emos poner en el c+!i o# no cam$ia ( siempre est/ !e la misma manera# en cam$io una ta$la Din/mica# pue!e cam$iar !e conteni!o# (a que suelen usarse cuan!o se usan $ase !e !atos# en el si uiente e-emplo# se e1traer/n los !atos !e una ta$la# ( llenaremos un arre lo# el cual pasaremos por mEto!o MPOST a nuestra clase gen_pdf.php Na(amos primero a nuestra clase gen_pdf.php En nuestra Clase p4p# lo que 4acemos es 4acer la re&erencia como (a 4emos ,isto a nuestro li$rer.a FPDF# creamos la clase con los mEto!os FancyTable(), el cual lo 7nico que 4ace es crear una ta$la colorea!a# nuestra clase que enera el PDF# ser/ llama!a por mEto!o !e MPOST a tra,Es !e un $ot+n# !on!e reci$iremos un arre lo# ( lo que 4ace nuestra clase ser/ quitarle el Seriali6a!o# (a que el crea!or !e la ta$la en el in!e1# nos trae el arre lo Seriali6a!o# (a que si pasamos el Arre lo tal cual !espuEs !e crearlo# no ten!r/ el &ormato necesario para que sea car a!o en nuestra ta$la# a Continuaci+n el c+!i o*
$thi3A'SetFillColor?664"601"611@C $thi3A'Set4eHtColor?0@C $thi3A'SetFont?''@C // Dato3 $fill E fal3eC forea*h?$data a3 $roF@ < $thi3A'Cell?$FK0L"6"$roFK0L"',M'"0"','"$fill@C $thi3A'Cell?$FK1L"6"$roFK1L"',M'"0"','"$fill@C $thi3A'Cell?$FK6L"6"$roFK6L"',M'"0"'M'"$fill@C $thi3A'Cell?$FK0L"6"$roFK0L"',M'"0"'M'"$fill@C $thi3A'Cell?$FK4L"6"$roFK4L"',M'"0"'M'"$fill@C $thi3A',n?@C $fill E %$fillC =
// ,5nea de *ierre
$thi3A'Cell?arraG.3$(?$F@"0"''"'4'@C = =
A4ora# lo 7nico que pasaremos a 4acer ser/ lo si uiente# !eclarar la ,aria$le $datos# la cual reci$ir/ nuestro Arre lo que traeremos !es!e la otra clase# e instanciar nuestro PDF%
// Me*i)i(o3 arreglo )idi(en3ional 3erialiNado G lo de3*erialiNa(o3 $dato3 E $n3erialiNe?$rlde*ode?$.P&S4K'arreglo'L@@C //para(etro3 del *on3tr$*tor ?, orienta*i7n !oriNontal" (( (ediada en (il5(etro3" ,etter ta(aOo de la ho>a // &P& el *on3tr$*tor Q$e lla(a(o3 e3 el de la *la3e padre. $pdf E neF PDF?','"'(('"',etter'@C // 45t$lo3 de la3 *ol$(na3 $header E arraG?'41'" '46'" '40'" '44'" '41'@C // Carga de dato3 $pdfA'SetFont?'Arial'"''"/@C $pdfA'AddPage?@C
3P
$pdfA'Fan*G4a)le?$header"$dato3@C $pdfA'&$tp$t?@C
B/sicamente eso 4a si!o nuestra clase 0enera!ora !el PDF# a4ora solo nos 4ace &alta nuestra clase ta$la%p4p# el c+!i o es el si uiente
<?php //llenar arreglo de dato3... for?$iE0C $i<1C $iJJ@ < for?$>E0C $><1C $>JJ@ < $dato3K$iLK$>L E DRA?D . $i . D"D . $> . D@DC = = //2a*iar infor(a*i7n del arreglo en $na ta)la !4#, e*ho D<ta)le )orderE'1''DC for?$iE0C $i<1C $iJJ@ < e*ho D<tr'DC for?$>E0C $><1C $>JJ@ < e*ho D<td'D . $dato3K$iLK$>L . D</td'DC = e*ho D</tr'DC = e*ho D</ta)le'DC
// SerialiNa*i7n de Arreglo para en2io por P&S4 $3tr E 3erialiNe?$dato3@C $3tr E $rlen*ode?$3tr@C
//Boton en2iar" 2aria)le 3tr *ontiene arreglo )idi(en*ional 3erialiNado" 3e en2ia en $na 2aria)le o*$lta.
33
e*ho D<for( a*tionE'gen.pdf.php' (ethodE'P&S4'' <inp$t na(eE'arreglo' tGpeE'hidden' 2al$eE'$3tr'' <inp$t na(eE'en2iar' tGpeE'3$)(it' 2al$eE' Sn2iar '' </for('DC
?'
Como ,er/n en las 7ltimas l.neas !e c+!i o# tenemos un $ot+n# al cual le asi namos como acci+n llamar a nuestra clase enera!ora !el PDF# le asi namos a nuestra ,aria$le Qstr el ,alor que toma el arre lo# ( lo en,iamos por MPOST a nuestra clase enera!ora% El resulta!o !e$e ser lo si uiente* Este es el Formulario que 4emos crea!o# ( si 4acemos Clic en el $ot+n En,iar# nos !e$er.a crear la misma ta$la en PDF !e una &orma colori!a%
3;
D listo# 4emos lo ra!o e1traer !atos !e una ta$la !in/mica# el e-emplo anterior usa un arre lo que se enera autom/ticamente e incrementa los ,alores me!iante ; ciclos# uno para &ilas ( otro para columnas%
3C