Você está na página 1de 9

Class fpdf

2.1 - Comeando
Vamos gerar PDFs usando a classe FPDF. Veremos nessa lio quais so os mtodos oferecidos pela classe e como us-los. Nosso primeiro exemplo
<?php require_once 'fpdf.php'; $meu_pdf = new FPDF(); ?>

!sse ser sempre o c"digo inicial. #nclu$mos o arqui%o que contm a definio da classe &fpdf.php'( e instanciamos um no%o o)*eto FPDF. !m nosso exemplo( passamos a refer+ncia para a %ari%el $meu_pdf. , construtor da classe rece)e di%ersos par-metros &que no so o)rigat"rios'( como mostrado no pr"ximo exemplo
<?php require_once 'fpdf.php'; $meu_pdf = new FPDF('P', 'cm', 'A '); ?>

. lista de par-metros a seguinte


/0 - orientao da pgina P para retrato e 1 para paisagem2 30 - unidade de medida padro cm para cent$metros( pt para pontos &pixels'( mm para mil$metros e in para polegadas2 40 - formato da pgina A3( A4( A5( Letter( Legal.

2.2 - Configurando o documento


.ssim como em um editor de texto comum( podemos fa5er formata6es especiais em nosso documento PDF usando a classe FPDF. Comecemos pelas margens. . formatao das margens feita atra%s do mtodo SetMargins(). !sse mtodo rece)e tr+s par-metros a medida da margem esquerda( da margem superior e da margem direita &este opcional'( respecti%amente. 7 poss$%el tam)m definir a medida de cada margem separadamente( atra%s dos seguintes mtodos

8et1eft9argin&tamanh '( para a margem esquerda 8et:op9argin&tamanh '( para a margem superior 8et;ig<t9argin&tamanh '( para a margem direita

Ve*amos um exemplo
<?php require_once 'fpdf.php'; $meu_pdf = new FPDF('P', 'cm', 'A '); $meu_pdf !> "e#$%r&in'((.), (.)); ** +em,re!'e que definimo' % unid%de de medid% como cen#-me#ro' ?>

Para definir o autor e o t$tulo do documento( usamos os mtodos SetAuth r() e Set!itle()( cu*os par-metros so( respecti%amente( strings para o nome do autor e para o t$tulo do documento.

2.3 - Adio de pginas e escrita


.ntes de comearmos a escre%er no documento( precisamos adicionar-l<e uma pgina. Para tanto( usamos o mtodo AddPage()( cu*o =nico par-metro &que opcional' a orientao da pgina P para retrato e 1 para paisagem. . escrita no documento no comea antes das defini6es de fonte e posicionamento do texto em relao > pgina. ,s mtodos a seguir so utili5ados para essa tarefa

8etFont&'( para definir a fonte utili5ada. Possui os seguintes par-metros o /0 - fonte uma string representando o nome da fonte. .s fontes permitidas so aquelas dentro do diret"rio "f nt( com o nome sem a extenso .p<p2 o 30 - estilo uma string %a5ia para n rmal( #$# para negrito( #%# para itlico e #&# para su)lin<ado2 o 40 - unidade de medida as mesmas para a configurao da pgina2 o ?0 - taman<o uma medida em pontos &pt' para o taman<o da fonte2 8etFont8i5e&' altera o taman<o da fonte especificado anteriormente2 8et:extColor&' define a cor da fonte( atra%s do c"digo '($. Possui tr+s par-metros o @m inteiro para a quantidade de %ermel<o( o)rigat"rio2 o @m inteiro para a quantidade de %erde( opcional2 o @m inteiro para a quantidade de a5ul( opcional2 8etAB&' define a posio do texto na pgina( atra%s de dois par-metros o , %alor da coordenada A( na unidade de medida * especificada2 o , %alor da coordenada B( na unidade de medida * especificada2

8etA&' define apenas a coordenada A da posio do texto2 8etB&' define apenas a coordenada B da posio do texto.

.s coordenadas so definidas com origem no topo da pgina( no lado esquerdo. Depois de configurarmos o local onde o texto ser inserido( e a formatao do mesmo( utili5amos o mtodo )rite() para efetuar a escrita. !sse mtodo possui tr+s par-metros

/0 - a altura do texto em relao a )ase da lin<a 30 - a string a ser escrita 40 - se dese*amos que a string se*a um linC( especificamos nesse terceiro par-metro qual o endereo do linC

Ve*amos um c"digo de exemplo


<?php require_once 'fpdf.php'; ** in'#%nci%ndo o o,.e#o $meu_pdf = new FPDF('P', 'cm', 'A '); ** %dicion%ndo um% p/&in% $meu_pdf !> AddP%&e('P'); ** 'P' p%r% form%#o re#r%#o ** definindo %' m%r&en' $meu_pdf !> "e#$%r&in'((.), (.)); ** +em,re!'e que definimo' % unid%de de medid% como cen#-me#ro' ** confi&ur%ndo o #e0#o $meu_pdf !> "e#Fon#(1#ime'1, 1231, 1cm1, 45); ** 6ime' 7ew 8om%n, em ne&ri#o e i#/+ico, unid%de de medid% cm, #%m%nho 45 $meu_pdf !> "e#6e0#9o+or(:, :, ())); ** %;u+ $meu_pdf !> "e#<=( , ); ** > cen#-me#ro' d% e'querd% e do #opo ** e'cre?endo $meu_pdf !> @ri#e(:.), 19ri%ndo PDF' com 1); ** e'cre?endo e cri%ndo um +inA $meu_pdf !> @ri#e(:.), 1PBP1, 1h##pC**www.php.ne#1); ?>

Para inserir que)ras de lin<a( )asta c<amar o mtodo Ln(). !ste mtodo possui um par-metro opcional a altura da pr"xima lin<a. Vamos adicionar algum texto ao nosso documento anterior
<?php require_once 'fpdf.php'; ** in'#%nci%ndo o o,.e#o $meu_pdf = new FPDF('P', 'cm', 'A '); ** %dicion%ndo um% p/&in% $meu_pdf !> AddP%&e('P'); ** 'P' p%r% form%#o re#r%#o ** definindo %' m%r&en' $meu_pdf !> "e#$%r&in'((.), (.)); ** +em,re!'e que definimo' % unid%de de medid% como cen#-me#ro' ** confi&ur%ndo o #e0#o $meu_pdf !> "e#Fon#(1#ime'1, 1231, 1cm1, 45); ** 6ime' 7ew 8om%n, em ne&ri#o e i#/+ico, unid%de de medid% cm, #%m%nho 45 $meu_pdf !> "e#6e0#9o+or(:, :, ())); ** %;u+ $meu_pdf !> "e#<=( , ); ** % cen#-me#ro' d% e'querd% e do #opo ** e'cre?endo $meu_pdf !> @ri#e(:.), 19ri%ndo PDF' com 1); ** e'cre?endo e cri%ndo um +inA $meu_pdf !> @ri#e(:.), 1PBP1, 1h##pC**www.php.ne#1);

** que,r%ndo % +inh%, du%' ?e;e' $meu_pdf !> Dn(); $meu_pdf !> Dn(); ** %dicion%ndo m%i' #e0#o $meu_pdf !> @ri#e(:.), 17Eo F #Eo comp+ic%doGG1); ?>

Voc+ de%e estar pensando cad+ o PDFD .t este momento( nosso script apenas monta%a o documento na mem"ria. , o)*eto no era transformado em um arqui%o PDF. Para que a sa$da se*a feita( usamos o mtodo *utput(). , exemplo anterior ficaria assim
<?php require_once 'fpdf.php'; ** in'#%nci%ndo o o,.e#o $meu_pdf = new FPDF('P', 'cm', 'A '); ** %dicion%ndo um% p/&in% $meu_pdf !> AddP%&e('P'); ** 'P' p%r% form%#o re#r%#o ** definindo %' m%r&en' $meu_pdf !> "e#$%r&in'((.), (.)); ** +em,re!'e que definimo' % unid%de de medid% como cen#-me#ro' ** confi&ur%ndo o #e0#o $meu_pdf !> "e#Fon#(1#ime'1, 1231, 1cm1, 45); ** 6ime' 7ew 8om%n #%m%nho 45, em ne&ri#o e i#/+ico $meu_pdf !> "e#6e0#9o+or(:, :, ())); ** %;u+ $meu_pdf !> "e#<=( , ); ** % cen#-me#ro' d% e'querd% e do #opo ** e'cre?endo $meu_pdf !> @ri#e(:.), 19ri%ndo PDF' com 1); ** e'cre?endo e cri%ndo um +inA $meu_pdf !> @ri#e(:.), 1PBP1, 1h##pC**www.php.ne#1); ** que,r%ndo % +inh%, du%' ?e;e' $meu_pdf !> Dn(); $meu_pdf !> Dn(); ** %dicion%ndo m%i' #e0#o $meu_pdf !> @ri#e(:.), 17Eo F #Eo comp+ic%doGG1); ** &er%ndo % '%-d% $meu_pdf !> Hu#pu#(); ?>

*utput() sempre o =ltimo mtodo c<amado( * que no poss$%el( por exemplo( modificar a fonte de um documento que * foi en%iado para o na%egador.

2.4 - Usando clulas


. classe FPDF oferece um recurso interessante poss$%el criar clulas para agrupar o conte=do. .o utili5ar clulas( %oc+ possi)ilita uma maior gama de formatao( como desen<ar )ordas e preenc<er o plano de fundo. Para tanto( existem dois mtodos

Cell&' cria uma clula. 8eus par-metros so o /0 - largura da clula. Enico par-metro o)rigat"rio2 o 30 - altura da pgina. ,pcional2 o 40 - texto a ser inserido na clula. ,pcional( como os outros que seguem2 o ?0 - )orda da clula. / para todas as )ordas( F para nen<uma. Pode-se utili5ar com)ina6es das letras 1( :( ; e G para )ordas > esquerda( topo( direita e rodap( respecti%amente2

o o o o

H0 - onde de%e ser inserida a que)ra de lin<a na direita &F'( no in$cio da pr"xima lin<a &/' ou a)aixo da clula &3'2 I0 - alin<amento do texto dentro da clula 1 para esquerda( C para o centro e ; para a direita2 J0 - preenc<imento. F para no-preenc<ido( / para preenc<ido2 K0 - linC. 9esmo funcionamento do terceiro par-metro de )rite().

9ultiCell&' cria di%ersas clulas. Par-metros o /0 - largura da clula. Enico par-metro o)rigat"rio2 o 30 - altura da pgina. ,pcional2 o 40 - texto a ser inserido na clula. ,pcional( como os outros que seguem2 o ?0 - )orda da clula. / para todas as )ordas( F para nen<uma. Pode-se utili5ar com)ina6es das letras 1( :( ; e G para )ordas > esquerda( topo( direita e rodap( respecti%amente2 o H0 - onde de%e ser inserida a que)ra de lin<a na direita &F'( no in$cio da pr"xima lin<a &/' ou a)aixo da clula &3'2 o I0 - alin<amento do texto dentro da clula 1 para esquerda( C para o centro e ; para a direita2 o J0 - preenc<imento. F para no-preenc<ido( / para preenc<ido.

.p"s uma c<amada > +ell()( o indicador de posio retorna para a posio 5ero da esquerda( na pr"xima lin<a( o que no ocorre com Multi+ell(). Ve*amos um exemplo

2.5 - nserindo imagens e desen!os


Para inserir uma imagem no documento( usamos o mtodo %mage(). . lista de par-metros a seguinte

/0 - endereo da imagem. ,)rigat"rio2 o #magens LPM em preto e )ranco( coloridas e no formato C9BN2 o #magens PNM sem camada alfa nem entrelaamento. 8o permitidas imagens com cores indexadas2 30 - a a)cissa da posio na qual a imagem ser inserida &medida do topo para )aixo'. ,)rigat"rio2 40 - a ordenada da posio na qual a imagem ser inserida &medida da esquerda para a direita'. ,)rigat"rio2 ?0 - largura da imagem na pgina. ,pcional2 H0 - altura da imagem na pgina. ,pcional2 I0 - tipo do arqui%o LPM( LP!M ou PNM. ,pcional2 J0 - linC. #nsere um linC a uma imagem( da mesma forma que o mtodo )rite(). ,pcional.

Ve*amos um exemplo
<?php require_once 'fpdf.php'; ** in'#%nci%ndo o o,.e#o $meu_pdf = new FPDF('P', 'cm', 'A '); ** %dicion%ndo um% p/&in% $meu_pdf !> AddP%&e('P'); ** 'P' p%r% form%#o re#r%#o ** definindo %' m%r&en' $meu_pdf !> "e#$%r&in'((.), (.)); ** +em,re!'e que definimo' % unid%de de medid% como cen#-me#ro' ** in'erindo % im%&em $meu_pdf !> 3m%&e(1php..p&1, I, )); ** produ;indo % '%-d% $meu_pdf !> Hu#pu#(); ?> ** im%&em php..&p % I cm d% e'querd% e ) do #opo

8al%e uma imagem no diret"rio onde se encontra o seu script POP. 8u)stitua o nome passado como par-metro para o mtodo pelo nome da sua imagem &ou sal%e sua imagem com o nome utili5ado' e teste o c"digo. Viu como foi fcilD Criar desen<os tam)m muito simples. . )i)lioteca disp6e de recursos para desen<ar lin<as e ret-ngulos( atra%s dos mtodos Line() e 'ect()( respecti%amente. , mtodo Line() rece)e os seguintes par-metros

/0 - .)cissa &em relao > esquerda da pgina' do ponto inicial da lin<a2 30 - ,rdenada &em relao ao topo da pgina' do ponto inicial da lin<a2 40 - .)cissa &em relao > esquerda da pgina' do ponto final da lin<a2 ?0 - ,rdenada &em relao ao topo da pgina' do ponto final da lin<a.

Ve*a que para que a lin<a se*a desen<ada( )asta apenas informar onde ela comea e onde termina. , mtodo 'ect() rece)e os seguintes par-metros

/0 - .)cissa onde o canto superior esquerdo do ret-ngulo ser posicionado2 30 - ,rdenada onde o canto superior esquerdo do ret-ngulo ser posicionado2 40 - 1argura do ret-ngulo2 ?0 - .ltura do ret-ngulo2 H0 - !stilo o PDP para desen<ar somente )ordas2 o PFP para somente preenc<er internamente2 o PDFP &ou PFDP' para desen<ar as )ordas e preenc<er2

, quinto par-metro opcional. Por padro( apenas as )ordas so desen<adas. 1em)re-se de utili5ar a unidade de medida esta)elecida l no in$cioQ , exemplo a seguir desen<a alguns ret-ngulos e lin<as no PDF. :este o script para %er o resultado.
<?php require_once 'fpdf.php'; ** in'#%nci%ndo o o,.e#o $meu_pdf = new FPDF('P', 'cm', 'A '); ** %dicion%ndo um% p/&in% $meu_pdf !> AddP%&e('P'); ** 'P' p%r% form%#o re#r%#o ** definindo %' m%r&en' $meu_pdf !> "e#$%r&in'((.), (.)); ** +em,re!'e que definimo' % unid%de de medid% como cen#-me#ro' ** de'enh%ndo um re#Jn&u+o 'em preenchimen#o $meu_pdf !> 8ec#(K, K, 4), 4); ** o me'mo re#Jn&u+o %n#erior, m%' preenchido $meu_pdf !> 8ec#(K, I, 4), 4, 1F1); ** %+&um%' +inh%', form%ndo um #riJn&u+o $meu_pdf !> Dine(K, 5, 4), 5); $meu_pdf !> Dine(4), 5, K, 45); $meu_pdf !> Dine(K, 45, K, 5); ** produ;indo % '%-d% $meu_pdf !> Hu#pu#(); ?>

7 poss$%el tam)m alterar as cores das )ordas e do preenc<imento. Para tanto( usamos os mtodos SetDra,+ l r() e SetFill+ l r()( que rece)em tr+s par-metros

/0 - Ruantidade de %ermel<o da cor( o)rigat"rio2 30 - Ruantidade de %erde da cor( opcional2 40 - Ruantidade de a5ul da cor( opcional.

Procure ta)elas com c"digos ;MG de cores. ,s %alores ilustrados nessas ta)elas so passados como par-metros aqui. Ve*a um exemplo
<?php require_once 'fpdf.php'; ** in'#%nci%ndo o o,.e#o $meu_pdf = new FPDF('P', 'cm', 'A '); ** %dicion%ndo um% p/&in% $meu_pdf !> AddP%&e('P'); ** 'P' p%r% form%#o re#r%#o ** definindo % cor do preenchimen#o $meu_pdf !> "e#Fi++9o+or(:, :, ())); ** de'enh%ndo um re#Jn&u+o preenchido $meu_pdf !> 8ec#(K, K, , L, 1F1); ** m%i' %+&um%' definiMNe' e de'enho' $meu_pdf !> "e#Fi++9o+or(()), ()), ())); $meu_pdf !> 8ec#(L, K, , L, 1F1); $meu_pdf !> "e#Fi++9o+or(()), :, :); $meu_pdf !> 8ec#(44, K, , L, 1F1); ** du%' +inh%' ?erde' $meu_pdf !> "e#Dr%w9o+or(:, ()), :); $meu_pdf !> Dine(K, 4), 4), 4)); $meu_pdf !> Dine(K, 4I, 4), 4I); ** produ;indo % '%-d% $meu_pdf !> Hu#pu#(); ?>

Com os ret-ngulos( desen<amos a )andeira da Frana.

2." - Ca#eal!os e rodaps


!xistem dois mtodos na classe FPDF que inserem ca)eal<o e rodap em uma pgina. !les no podem ser c<amados diretamente2 so c<amados automaticamente quando inserimos uma no%a pgina no documento. Por padro( eles no possuem implementao( e( portanto( no produ5em resultado nas pginas. Para que os ca)eal<os e rodaps se*am criados( %oc+ precisa so)rescre%er esses dois mtodos para que eles faam o que %oc+ dese*a &inserindo texto personali5ado( com estilo personali5ado'. , exemplo a seguir cria uma no%a classe que estende a classe FPDF e so)rescre%e os dois mtodos citados. Ve*a
<?php require 'fpdf.php'; c+%'' PDF e0#end' FPDF O func#ion Be%der() O $#hi' !> 3m%&e('c%,ec%+ho..p&', :, :); P

** im%&em p%r% o c%,eM%+ho

func#ion Foo#er() O $#hi' !> "e#Fon#(1Ari%+1,121, 1cm1, 4:); ** 9onfi&ur%MEo d% fon#e do c%,eM%+ho $#hi' !> "e#<=(!45, !(); ** Po'icion%ndo o cur'or p%r% in'erir o rod%pF

$#hi' !> $u+#i9e++(4L, 4, 1A PDF Foo#er CC P& 1 . $#hi'!>P%&e7o(), 4); 8od%pF P ?> P

**

Note que as coordenadas passadas so medidas na unidade definida na criao do o)*eto. Voc+ precisa alterar essa caracter$stica de acordo com as suas necessidades. Coordenadas negati%as indicam que a medida feita da extremidade oposta > origem a partir da direita( na <ori5ontal2 a partir do rodap( na %ertical.

2.$ - %utros mtodos oferecidos pela classe &'(&


. seguir esto alguns mtodos que podem ser =teis na criao de um documento( *unto com uma )re%e descrio do que o mtodo fa5.

MetA&' - retorna a a)cissa atual do cursor MetB&' - retorna a ordenada atual do cursor Met8tringSidt<&' - retorna o comprimento de uma string passada como par-metro( le%ando em considerao as configura6es da fonte atual( e da unidade de medida ati%a. Etil quando precisamos definir taman<os de clulas( lin<as ou imagens( para adequ-las ao texto. 1inC&' - cria um linC em uma determinada regio retangular do documento. 8eus par-metros so o /0 - a)cissa &medida da esquerda para a direita' da regio do linC2 o 30 - ordenada &medida do topo para )aixo' da regio do linC2 o 40 - largura da regio retangular do linC2 o ?0 - altura da regio retangular do linC2 o H0 - endereo do linC. 8et1ineSidt<&' - define a largura da lin<a de desen<o &1ine&'( lem)raD'( atra%s de seu =nico par-metro :ext&' - !scre%e um texto na posio especificada. Par-metros o /0 - .)cissa do canto superior esquerdo do )loco do texto2 o 30 - ,rdenada do canto superior esquerdo do )loco do texto2 o 40 - , pr"prio texto. PageNo&' - * %isto anteriormente( retorna o n=mero da pgina atual

@ma refer+ncia completa dos mtodos pode ser encontrada em <ttp TTUUU.fpdf.orgTenTdocTindex.p<p

2.) - *+emplo de gerador de '(&


, c"digo a seguir gera um arqui%o PDF a partir de dados %indos %ia P,8:. 1eia atentamente os comentrios do c"digo( que o explicam completamente
<?php ** o,#endo o' d%do' ?indo' ?i% PH"6 $#i#u+o = $_PH"6Q1#i#u+o1R; $#e0#o = $_PH"6Q1#e0#o1R; $%u#or = $_PH"6Q1%u#or1R; ** requi'i#%ndo % c+%''e FPDF require_once(1.*fpdf*fpdf.php1); ** cri%ndo e confi&ur%ndo o o,.e#o FPDF $pdf = new FPDF(1P1, 1cm1, 1A 1); $pdf $pdf $pdf $pdf $pdf !> !> !> !> !> AddP%&e(1P1); "e#$%r&in'((.), (.)); "e#Fon#(1#ime'1, 121, 1cm1, 4(); ** #%m%nho diferenci%do p%r% o #-#u+o "e#6e0#9o+or(:, :, :); ** pre#o "e#<=( , );

** e'cre?endo o #-#u+o

$pdf !> @ri#e(:.), $#i#u+o); ** %+&um%' que,r%' de +inh% $pdf !> Dn(); $pdf !> Dn(); $pdf !> Dn(); ** mud%ndo % fon#e p%r% e'cre?er o corpo do documen#o $pdf !> "e#Fon#(1#ime'1, 11, 1cm1, 4(); ** e'cre?endo o corpo $pdf !> @ri#e(:.), $#e0#o); ** m%i' que,r%' de +inh% $pdf !> Dn(); $pdf !> Dn(); ** mud%ndo % fon#e p%r% inc+uir referSnci% %o nome do %u#or $pdf !> "e#Fon#(1#ime'1, 131, 1cm1, 4(); ** e'cre?endo o nome do %u#or $pdf !> @ri#e(:.), 1Au#orC 1 . $%u#or); ** cri%ndo o PDF $pdf !> Hu#pu#(); ?>

8al%e o c"digo anterior como geraPDF.php. , seguinte c"digo O:91 &geraPDF.html' monta um pequeno formulrio que su)mete dados para nosso script gerador de PDF. Ve*a
<h#m+> <he%d> <#i#+e> <*he%d> <,odU> <h4> Preench% o' c%mpo' %,%i0oC <*h4> <form n%me=1form41 %c#ion=1&er%PDF.php1 me#hod=1PH"61> <inpu# #Upe=1#e0#1 m%0+en&#h=1):1 'i;e=1):1 n%me=1#i#u+o1 ?%+ue=16i#u+o do documen#o...1 *><,r *> <#e0#%re% n%me=1#e0#o1 co+'=1 :1 row'=1(:1> Di&i#e %qui o #e0#o do documen#o... <*#e0#%re%><,r *> <inpu# #Upe=1#e0#1 m%0+en&#h=1):1 'i;e=1):1 n%me=1%u#or1 ?%+ue=17ome do %u#or...1 *><,r *> <inpu# #Upe=1'u,mi#1 ?%+ue=1TV8A8G1 *> <inpu# #Upe=1re'e#1 ?%+ue=1D3$PA8G1 *> <*form> <*,odU> <*h#m+> <*#i#+e> Ter%dor 'imp+e' de PDF

Você também pode gostar