Sei sulla pagina 1di 21

Ejemplo bsico

Comencemos con el clsico ejemplo:


<?php
require(' f pdf . php' );

$pdf =new FPDF();
$pdf ->AddPage();
$pdf ->Set Font (' Ar i al ' ,' B' ,16);
$pdf ->Cel l (40,10,' Hol a, Mundo! ' );
$pdf ->Out put ();
?>
[Demo]
Despus de incluir el fichero de la clase, creamos el objeto FDPF. El constructor
FPDF() se usa aqu con sus valores por defecto: las pginas son de tamao a4 alargado
y la unidad de medida es el milmetro. Se podra haber declarado explcitamente con:
$pdf =new FPDF(' P' ,' mm' ,' A4' );
Es posible usar el formato apaisado(L), otros formatos de pgina (como Car t a y Legal )
y otras unidades de medida (pt , cm, i n).

Por el momento no hemos creado ninguna pgina, as que aadiremos una con
AddPage(). El origen de coordenadas est en la esquina superior izquierda y la posicin
actual est por defecto situada a 1 cm de los bordes; los mrgenes pueden cambiarse con
SetMargins().

Antes de que podamos imprimir texto, es obligatorio escoger una fuente con SetFont(),
si no, el documento no ser vlido. Escogemos Arial en negrita de tamao 16:
$pdf ->Set Font (' Ar i al ' ,' B' ,16);
Podramos haber especificado itlica con I, subrayado con U o normal con una cadena
vaca (o cualquier combinacin de las anteriores). Observe que el tamao de la fuente se
detemina en puntos, no en milmetros (ni en cualquier otra unidad establecida por el
usuario); es la nica excepcin. Las otras fuentes incorporadas son Times, Courier,
Symbol y ZapfDingbats.

Ahora podemos imprimir una celda con Cell(). Una celda es una superficie rectangular,
con borde si se quiere, que contiene texto. Se imprime en la posicin actual.
Especificamos sus dimensiones, el texto (centrado o alineado), si queremos dibujar o no
los bordes, y dnde se ubicar la posicin actual despus de imprimir la celda (a la
derecha, debajo o al principio de la siguiente lnea). Para aadir el borde, deberemos
hacer esto:
$pdf ->Cel l (40,10,' Hol a, Mundo! ' ,1);
Para aadir una nueva celda a continuacin, con el texto centrado e ir a la siguiente
lnea, escribiremos:
$pdf ->Cel l (60,10,' Hecho con FPDF. ' ,0,1,' C' );
Nota: el salto de lnea puede provocarse tambin mediante Ln(). Este mtodo le permite
especificar adems la altura del salto.

Finalmente, el documento se cierra y se enva al navegador con Output(). Tambin
podramos haberlo guardado en un fichero pasando como parmetro el nombre del
archivo.

Cuidado: en caso de que el PDF se enve al navegador, nada ms debe enviarse, ni antes
ni despus (el ms mnimo espacio en blanco o retorno de carro tambin cuenta). Si se
enva algn dato antes, obtendr el mensaje de error: "Some data has already been
output to browser, can't send PDF file". Si se enva despus, su navegador puede que
muestre nicamente una pgina en blanco.
Aadiendo nuevas fuentes y codificaciones
Este tutorial explica cmo usar fuentes TrueType o Type1 de forma que usted no se vea
limitado a las fuentes incorporadas en FPDF. El otro punto de inters es que pueda
elegir la codificacin de la fuente, lo que le permitir usar otros idiomas aparte de los
europeos occidentales (ya que las fuentes estndar tienen muy pocos caracteres
disponibles).

Existen dos formas de usar una nueva fuente: incluirla en el PDF o no. Cuando una
fuente no se incluye, se busca en el sistema. La ventaja es que el fichero PDF es ms
pequeo; sin embargo, si la fuente no est disponible en el sistema, se usa otra como
sustituta. As que es aconsejable asegurarse de que la fuente en cuestin est instalada
en los sistemas de los clientes. Si el fichero est destinado a una audiencia numerosas,
es mejor incluir la fuente.

Aadir una nueva fuente requiere tres pasos para las TrueType:
Generacin del fichero de medidas (.afm)
Generacin del fichero de definicin de la fuente (.php)
Declaracin de la fuente en el script
Para las fuentes Type1, el primer paso, tericamente, no es necesario porque suelen
venir acompaadas de un fichero AFM. En el caso de que usted slo tenga un fichero de
medidas en formato PFM, use el conversor disponible aqu.
Generacin del fichero de medidas
El primer paso para una TrueType consiste en generar el fichero AFM. Existe una
aplicacin para hacer esto: ttf2pt1. El ejecutable para Windows est disponible aqu. La
instruccin para usarlo desde la lnea de comandos es:

t t f 2pt 1 - a f ont . t t f f ont

Por ejemplo, para la Comic Sans MS Regular:

t t f 2pt 1 - a c: \ wi ndows\ f ont s\ comi c. t t f comi c

Se crearn dos ficheros; el archivo en el que estamos interesados en el comic.afm.
Generacin del fichero de definicin de la fuente
El segundo paso consiste en generar un fichero PHP que contenga toda la informacin
que necesita FPDF; adems, el fichero de la fuente deber comprimirse. Para hacer esto,
se distribuye un script auxiliar en el directorio font/makefont del paquete:
makefont.php. Contiene la siguiente funcin:

MakeFont ( string f ont f i l e, string af mf i l e [ , string enc [ , array pat ch
[ , string t ype] ] ] )

f ont f i l e
Ubicacin del fichero .ttf o .pfb.
af mf i l e
Ubicacin del fichero .afm.
enc
Nombre de la codificacin. Valor por defecto: cp1252.
pat ch
Modificacin opcionar de la codificacin. Vaco por defecto.
t ype
Tipo de la fuente (Tr ueType o Type1). Valor por defecto: Tr ueType.

El primer parmetro es el nombre del fichero de la fuente. La extensin debe ser .ttf o
.pfb y determina el tipo de fuente. Si tiene una fuente Type1 en formato ASCII (.pfa),
puede convertirla a formato binario con t1utils.
Si no quiere incluir la fuente en el documento, pase una cadena vaca. En este caso, el
tipo se determina mediante el parmetro t ype.
Nota: en caso de que una fuente tenga el mismo nombre que una estndar, por ejemplo
arial.ttf, es obligatorio incluirla. Si no lo hace, Acrobat usar su propia fuente (la
estndar).

El fichero AFM es el que generamos anteriormente.

La codificacin define la asociacin entre un cdigo (de 0 a 255) y un carcter. Los
primeros 123 son fijos y se corresponden con los caracteres ASCII; los siguientes son
variables. Las codificaciones se almacenan en ficheros .map. Estn disponibles:
cp1250 (Europa Central)
cp1251 (cirlico)
cp1252 (Europa Occidental)
cp1253 (griego)
cp1254 (turco)
cp1255 (hebreo)
cp1257 (bltico)
cp1258 (vietnamita)
cp874 (tailands)
ISO-8859-1 (Europa Occidental)
ISO-8859-2 (Europa Central)
ISO-8859-4 (bltico)
ISO-8859-5 (cirlico)
ISO-8859-7 (griego)
ISO-8859-9 (turco)
ISO-8859-11 (tailands)
ISO-8859-15 (Europa Occidental)
ISO-8859-16 (Europa Central)
KOI8-R (ruso)
KOI8-U (ucraniano)
Por supuesto, la fuente debe contener los caracteres aduecuados a la codificacin
escogida.
En el caso especial de una fuente de smbolos (esto es, que no contiene letras, como las
fuentes Symbol o ZapfDingbats), pase una cadena vaca.
Las codificaciones que empiezan con cp son usadas por Windows; los sistemas Linux
usan por lo general codificaciones ISO.
Nota: las fuentes estndar usan cp1252.

El cuarto parmetro le da la posibilidad de alterar la codificacin. A veces puede que
quiera aadir caracteres. Por ejemplo, ISO-8859-1 no contiene el smbolo para el euro.
Para aadirlo en la posicin 164, pase ar r ay( 164=>' Eur o' ) .

El ltimo parmetro se usa para definir el tipo de la fuenta en caso de que no se vaya a
incluir (esto es, si el primer parmetro est vaco).

Despus de llamar a la funcin (puede crear un nuevo fichero e incluir makefont.php o
simplemente aadir la llamada en el propio makefont.php), se crear un fichero .php con
el mismo nombre que el .afm. Puede renombrarlo si lo desea. En caso de incluir la
fuente, el fichero se comprime y da lugar a un segundo fichero con extensin .z
(excepto si la funcin de compresin no est disponible, puesto que requiere la
biblioteca zlib para PHP). Tambin puede renombrarlo, pero, en este caso, tendr que
modificar la variable $f i l e en el fichero .php consecuentemente.

Ejemplo:

MakeFont ( ' c: \ \ wi ndows\ \ f ont s\ \ comi c. t t f ' , ' comi c. af m' , ' cp1252' ) ;

que devuelve los ficheros comic.php y comic.z.

Entonces tendr que copiar los ficheros generados en el directorio de fuentes. Si el
fichero de la fuente no pudo ser comprimido, copie el .ttf o .pbf en lugar del .z.
Declaracin de la fuente en el script
El ltimo paso es el ms simple. Slo necesita llamar al mtodo AddFont(). Por
ejemplo:
$pdf ->AddFont (' Comi c' ,' ' ,' comi c. php' );
o, simplemente,
$pdf ->AddFont (' Comi c' );
Y la fuente queda disponible (en los estilos normal y subrayado), lista para usar como
las otras. Si hubiramos trabajado con la Comic Sans MS Bold (comicbd.ttf),
hubisemos escrito:
$pdf ->AddFont (' Comi c' ,' B' ,' comi cbd. php' );
Ejemplo
Veamos ahora un pequeo ejemplo completo. La fuente usada es Calligrapher,
disponible en http://www.abstractfonts.com/fonts/ (un sitio que ofrece un buen nmero
de fuentes TrueType gratuitas). El primer paso es generar el AFM:

t t f 2pt 1 - a cal l i gr a. t t f cal l i gr a

que nos devuelve calligra.afm (y calligra.t1a, que podemos borrar). Generamos entonces
la definicin:
<?php
require(' f ont / makef ont / makef ont . php' );

MakeFont (' cal l i gr a. t t f ' ,' cal l i gr a. af m' );
?>
La funcin nos devolver el siguiente informe:

Warning: character Euro is missing
Warning: character Zcaron is missing
Warning: character zcaron is missing
Warning: character eth is missing
Font file compressed (calligra.z)
Font definition file generated (calligra.php)

El carcter del euro no est en la fuente (es muy antigua). Tambin faltan otros tres
caracteres, pero no estamos interesados en ellos, as que da igual.
Podemos copiar estos dos ficheros en el directorio de fuentes y escribir el script:
<?php
require(' f pdf . php' );

$pdf =new FPDF();
$pdf ->AddFont (' Cal l i gr apher ' ,' ' ,' cal l i gr a. php' );
$pdf ->AddPage();
$pdf ->Set Font (' Cal l i gr apher ' ,' ' ,35);
$pdf ->Cel l (0,10,' Enj oy new f ont s wi t h FPDF! ' );
$pdf ->Out put ();
?>
[Demo]
Acerca del smbolo del euro
El carcter del euro no aparece en todas las codificaciones, y no siempre est en la
misma posicin:
Codificacin Posicin
cp1250 128
cp1251 136
cp1252 128
cp1253 128
cp1254 128
cp1255 128
cp1257 128
cp1258 128
cp874 128
ISO-8859-1 ausente
ISO-8859-2 ausente
ISO-8859-4 ausente
ISO-8859-5 ausente
ISO-8859-7 ausente
ISO-8859-9 ausente
ISO-8859-11 ausente
ISO-8859-15 164
ISO-8859-16 164
KOI8-R ausente
KOI8-U ausente

La codificacin ISO-8859-1 est muy extendida, pero no incluye el smbolo del euro. Si
lo necesita, la solucin ms simple consiste en usar cp1252 o ISO-8859-15, que son
prcticamente iguales pero contienen el preciado smbolo.
Para la ISO-8859-2, es posible sustituirla por la ISO-8859-16, pero contiene muchas
diferencias. Por tanto, es ms sencillo apaar la codificacin para aadir el smbolo, tal
como se explica arriba. Lo mismo se aplica a las dems codificaciones.
Sntesis de fuentes bajo Windows
Cuando una fuente TrueType no est disponible en un estilo determinado, Windows es
capaz de sintetizarla a partir de la versin normal. Por ejemplo, no hay Comic Sans MS
en cursiva, pero puede ser construida a partir de la Comic Sans MS regular (normal).
Esta caracterstica puede ser empleada en un fichero PDF pero, desgraciadamente,
requiere que la fuente normal est instalada en el sistema (no debe incluirla en el
documento). As es como se hace:
Generar el fichero de definicin para la fuente normal sin incluirla en el
documento (puede renombrarla para reflejar el estilo deseado)
Abrirlo y aadir a la variable $name una coma (,) seguida del estilo deseado
(I t al i c, Bol d o Bol dI t al i c)
Por ejemplo, para el fichero comici.php:

$name=' Comi cSansMS, I t al i c' ;

A partir de entonces, podr usarse normalmente:
$pdf ->AddFont (' Comi c' ,' I ' ,' comi ci . php' );
Reduciendo el tamao de las fuentes TrueType
Los ficheros de fuentes son con frecuencia bastante voluminosos (ms de 100, incluso
200 KB); esto se debe a que contienen los caracteres correspondientes a muchas
codificaciones. La compresin zlib los reduce, pero continan siendo bastante grandes.
Existe una tcnica para reducirlos an ms. Consiste en convertir la fuente a formato
Type1 con ttf2pt1 especificando la codificacin que le interesa; todos los dems
caracteres sern omitidos.
Por ejemplo, la fuente arial.ttf que viene con Windows 98 tiene un tamao de 267 KB
(contiene 1296 caracteres). Despus de comprimirla, pesa 147 KB. Convirtmosla a
Type1 manteniendo slo los caracteres cp1250:

t t f 2pt 1 - b - L cp1250. map c: \ wi ndows\ f ont s\ ar i al . t t f ar i al

Los ficheros .map estn en el directorio font/makefont/ del paquete. El proceso devuelve
arial.pfn y arial.afm. El fichero arial.pfb ocupa slo 35 KB, 30 KB despus de
comprimirlo.

Es incluso posible ir ms all. Si slo est usted interesado en un subconjunto de la
codificacin (es probable que no necesite los 217 caracteres), puede abrir el fichero
.map y quitar las lneas que no le interesen. Consecuentemente, el tamao del fichero
disminuir.
Columnas mltiples
En este ejemplo se mostrar como disponer texto en varias columnas.
<?php
require(' f pdf . php' );

class PDF extends FPDF
{
/ / Col umna act ual
var $col =0;
/ / Or denada de comi enzo de l a col umna
var $y0;

function Header ()
{
/ / Cabacer a
global $t i t l e;

$this->Set Font (' Ar i al ' ,' B' ,15);
$w=$this->Get St r i ngWi dt h($t i t l e)+6;
$this->Set X((210-$w)/2);
$this->Set Dr awCol or (0,80,180);
$this->Set Fi l l Col or (230,230,0);
$this->Set Text Col or (220,50,50);
$this->Set Li neWi dt h(1);
$this->Cel l ($w,9,$t i t l e,1,1,' C' ,1);
$this->Ln(10);
/ / Guar dar or denada
$this->y0=$this->Get Y();
}

function Foot er ()
{
/ / Pi e de pgi na
$this->Set Y(-15);
$this->Set Font (' Ar i al ' ,' I ' ,8);
$this->Set Text Col or (128);
$this->Cel l (0,10,' Pgi na ' .$this->PageNo(),0,0,' C' );
}

function Set Col ($col )
{
/ / Est abl ecer l a posi ci n de una col umna dada
$this->col =$col ;
$x=10+$col *65;
$this->Set Lef t Mar gi n($x);
$this->Set X($x);
}
function Accept PageBr eak()
{
/ / Mt odo que acept a o no el sal t o aut omt i co de pgi na
if($this->col <2)
{
/ / I r a l a si gui ent e col umna
$this->Set Col ($this->col +1);
/ / Est abl ecer l a or denada al pr i nci pi o
$this->Set Y($this->y0);
/ / Segui r en est a pgi na
return f al se;
}
else
{
/ / Vol ver a l a pr i mer a col umna
$this->Set Col (0);
/ / Sal t o de pgi na
return t r ue;
}
}

function Chapt er Ti t l e($num,$l abel )
{
/ / T t ul o
$this->Set Font (' Ar i al ' ,' ' ,12);
$this->Set Fi l l Col or (200,220,255);
$this->Cel l (0,6," Cap t ul o $num: $l abel " ,0,1,' L' ,1);
$this->Ln(4);
/ / Guar dar or denada
$this->y0=$this->Get Y();
}

function Chapt er Body($f i chi er )
{
/ / Abr i r f i cher o de t ext o
$f =f open($f i chi er ,' r ' );
$t xt =f r ead($f ,f i l esi ze($f i chi er ));
f cl ose($f );
/ / Fuent e
$this->Set Font (' Ti mes' ,' ' ,12);
/ / I mpr i mi r t ext o en una col umna de 6 cmde ancho
$this->Mul t i Cel l (60,5,$t xt );
$this->Ln();
/ / Ci t a en i t l i ca
$this->Set Font (' ' ,' I ' );
$this->Cel l (0,5,' ( f i n del ext r act o) ' );
/ / Vol ver a l a pr i mer a col umna
$this->Set Col (0);
}

function Pr i nt Chapt er ($num,$t i t l e,$f i l e)
{
/ / Aadi r cap t ul o
$this->AddPage();
$this->Chapt er Ti t l e($num,$t i t l e);
$this->Chapt er Body($f i l e);
}
}

$pdf =new PDF();
$t i t l e=' 20000 Leguas de Vi aj e Submar i no' ;
$pdf ->Set Ti t l e($t i t l e);
$pdf ->Set Aut hor (' J ul i o Ver ne' );
$pdf ->Pr i nt Chapt er (1,' UN RI ZO DE HUI DA' ,' 20k_c1. t xt ' );
$pdf ->Pr i nt Chapt er (2,' LOS PROS Y LOS CONTRAS' ,' 20k_c2. t xt ' );
$pdf ->Out put ();
?>
[Demo]
El mtodo clave usado es AcceptPageBreak(). Permite aceptar o no el salto automtico
de lnea. Evitndolo y alterando la posicin actual y el margen, se consigue la
disposicin deseada en columnas.
Por lo dems, poco cambia; se han aadido dos propiedades (atributos) a la clase para
almacenar el nmero de columna y la posicin donde empiezan las columnas, y la
llamada a MultCell() incluye un ancho de 6 centmetros.
Cabecera, pie, salto de pgina e imagen
Aqu tenemos un ejemplo de dos pginas con cabacera, pie de pgina y logotipo:
<?php
require(' f pdf . php' );

class PDF extends FPDF
{
/ / Cabecer a de pgi na
function Header ()
{
/ / Logo
$this->I mage(' l ogo_pb. png' ,10,8,33);
/ / Ar i al bol d 15
$this->Set Font (' Ar i al ' ,' B' ,15);
/ / Mover nos a l a der echa
$this->Cel l (80);
/ / T t ul o
$this->Cel l (30,10,' Ti t l e' ,1,0,' C' );
/ / Sal t o de l nea
$this->Ln(20);
}

/ / Pi e de pgi na
function Foot er ()
{
/ / Posi ci n: a 1, 5 cmdel f i nal
$this->Set Y(-15);
/ / Ar i al i t al i c 8
$this->Set Font (' Ar i al ' ,' I ' ,8);
/ / Nmer o de pgi na
$this->Cel l (0,10,' Page ' .$this->PageNo().' / {nb}' ,0,0,' C' );
}
}

/ / Cr eaci n del obj et o de l a cl ase her edada
$pdf =new PDF();
$pdf ->Al i asNbPages();
$pdf ->AddPage();
$pdf ->Set Font (' Ti mes' ,' ' ,12);
for($i =1;$i <=40;$i ++)
$pdf ->Cel l (0,10,' I mpr i mi endo l nea nmer o ' .$i ,0,1);
$pdf ->Out put ();
?>
[Demo]
Este ejemplo hace uso de los mtodos Header() y Footer() para procesar las cabeceras y
pies de pginas. Se llaman automticamente. Ya existen en la clase FPDF origuinal,
pero no hacen nada. Por ello, tenemos que heredar la clase y sobreescribirlos.

El logotipo se imprime con el mtodo Image() especificando su esquina superior
izquierda y su anchura. La altura se calcula automticamente respetando las
proporciones de la imagen.

Para imprimir el nmero de pgina, se le pasa un valor nulo (null) como ancho de la
celda. Eso significa que la celda se extender hasta el margen derecho de la pgina;
puede ser til centrar el texto. El nmero actual de la pgina se devuelve por el mtodos
PageNo(); mientras que el nmero total de pginas se obtiene mediante un valor
especial de {nb} que ser sustituido cuando se cierre el documento (suponiendo que
usted antes utilizara AliasNbPages()).
Observe el uso del mtodo SetY() que le permite especificar la posicin en una
ubicacin absoluta respecto del origen de coordenadas de la pgina, empezando por el
principio o por el final.

Otra caracterstica interesante se usa en el ejemplo: el salto automtico de pgina. Tan
pronto como una celda cruza el lmite mximo de la pgina (a 2 cm del final, por
defecto), se ejecuta un salto y se recupera la fuente. Aunque la cabecera y el pie usan su
propia fuente (Arial), el cuerpo del documento continua con Times. Este mecanismo
automtico de recuperacin tambin se aplica a los colores y al ancho de lnea. El lmite
que fuerza los saltos de pgina puede establecerse con SetAutoPageBreak().
Enlaces y texto flotante
Este tutorial explica cmo incluir enlaces (internos y externos) y muestra una nueva
manera de imprimir texto. Tambin incluye un intrprete rudimentario de HTML.
<?php
require(' f pdf . php' );

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

function PDF($or i ent at i on=' P' ,$uni t =' mm' ,$f or mat =' A4' )
{
/ / Ll ama al const r uct or de l a cl ase padr e
$this->FPDF($or i ent at i on,$uni t ,$f or mat );
/ / I ni ci aci n de var i abl es
$this->B=0;
$this->I =0;
$this->U=0;
$this->HREF=' ' ;
}

function Wr i t eHTML($ht ml )
{
/ / I nt r pr et e de HTML
$ht ml =st r _r epl ace(" \ n" ,' ' ,$ht ml );
$a=pr eg_spl i t (' / <( . *) >/ U' ,$ht ml ,-1,PREG_SPLI T_DELI M_CAPTURE);
foreach($a as $i =>$e)
{
if($i %2==0)
{
/ / Text
if($this->HREF)
$this->Put Li nk($this->HREF,$e);
else
$this->Wr i t e(5,$e);
}
else
{
/ / Et i quet a
if($e{0}==' / ' )
$this->Cl oseTag(st r t oupper (subst r ($e,1)));
else
{
/ / Ext r aer at r i but os
$a2=expl ode(' ' ,$e);
$t ag=st r t oupper (ar r ay_shi f t ($a2));
$at t r =array();
foreach($a2 as $v)
if(er eg(' ^( [ ^=] *) =[ " \ ' ] ?( [ ^" \ ' ] *) [ " \ ' ] ?$' ,$v,$a3))
$at t r [st r t oupper ($a3[1])]=$a3[2];
$this->OpenTag($t ag,$at t r );
}
}
}
}

function OpenTag($t ag,$at t r )
{
/ / Et i quet a de aper t ur a
if($t ag==' B' or $t ag==' I ' or $t ag==' U' )
$this->Set St yl e($t ag,t r ue);
if($t ag==' A' )
$this->HREF=$at t r [' HREF' ];
if($t ag==' BR' )
$this->Ln(5);
}

function Cl oseTag($t ag)
{
/ / Et i quet a de ci er r e
if($t ag==' B' or $t ag==' I ' or $t ag==' U' )
$this->Set St yl e($t ag,f al se);
if($t ag==' A' )
$this->HREF=' ' ;
}

function Set St yl e($t ag,$enabl e)
{
/ / Modi f i car est i l o y escoger l a f uent e cor r espondi ent e
$this->$t ag+=($enabl e ? 1 : -1);
$st yl e=' ' ;
foreach(array(' B' ,' I ' ,' U' ) as $s)
if($this->$s>0)
$st yl e.=$s;
$this->Set Font (' ' ,$st yl e);
}

function Put Li nk($URL,$t xt )
{
/ / Escr i bi r un hi per - enl ace
$this->Set Text Col or (0,0,255);
$this->Set St yl e(' U' ,t r ue);
$this->Wr i t e(5,$t xt ,$URL);
$this->Set St yl e(' U' ,f al se);
$this->Set Text Col or (0);
}
}

$ht ml =' Ahor a puede i mpr i mi r f ci l ment e t ext o mezcl ando
di f er ent es est i l os: <B>negr i t a</ B>, <I >i t l i ca</ I >, <U>subr ayado</ U>,
o
<B><I ><U>t odos a l a vez</ U></ I ></ B>! <BR>
Tambi n puede i ncl ui r enl aces en el t ext o, como <A
HREF=" ht t p: / / www. f pdf . or g" >www. f pdf . or g</ A>,
o en una i magen: pul se en el l ogot i po. ' ;

$pdf =new PDF();
/ / Pr i mer a pgi na
$pdf ->AddPage();
$pdf ->Set Font (' Ar i al ' ,' ' ,20);
$pdf ->Wr i t e(5,' Par a saber qu hay de nuevo en est e t ut or i al , pul se ' );
$pdf ->Set Font (' ' ,' U' );
$l i nk=$pdf ->AddLi nk();
$pdf ->Wr i t e(5,' aqu ' ,$l i nk);
$pdf ->Set Font (' ' );
/ / Segunda pgi na
$pdf ->AddPage();
$pdf ->Set Li nk($l i nk);
$pdf ->I mage(' l ogo. png' ,10,10,30,0,' ' ,' ht t p: / / www. f pdf . or g' );
$pdf ->Set Lef t Mar gi n(45);
$pdf ->Set Font Si ze(14);
$pdf ->Wr i t eHTML($ht ml );
$pdf ->Out put ();
?>
[Demo]
El nuevo mtodo para imprimir texto es Write(). Se parece mucho a MultiCell(); las
diferencias son:
El lmite de la lnea est en el margen derecho y la siguiente lnea empieza en el
izquierdo
La posicin actual se establece al final del texto
As que le permite escribir un texto, alterar el estilo de la fuente, y continuar en el punto
exacto donde lo dej. Sin embargo, no puede justificar el texto simultneamente a
derecha y a izquierda.

Este mtodo se usa en la primera pgina para aadir un enlace que apunta a la segunda
pgina. El principio de la frase se escribe en un estilo normal, despus cambiamos a
subrayado y la terminamos. El enlace se crea con AddLink(), que devuelve el
identificador del enlace. El identificador se pasa como tercer parmetro a Write(). Una
vez que la segunda pgina se ha creado, usamos SetLink() para hacer que el enlace
apunte al principio de la pgina actual.

Deespus ponemos una imagen con un enlace en ella. Un enlace externo apunta a una
URL (HTTP, mailto...). La URL se pasa como el ltimo parmetro de Image(). Observe
que los enlaces externos no funcionan cuando el PDF se muestra en un navegador
Netscape.

Finalmente, el margen izquierdo se modifica despus de la imagen con SetLeftMargin()
y se escribe texto en formato HTML. Se utiliza un intrprete HTML para esto, basado
en la funcin de divisin mediante expresiones regulares preg_split() y la opcin
PREG_SPLIT_DELIM_CAPTURE (incluida a partir de PHP 4.0.5) que permite
recoger tambin los elementos de divisin (en este caso, las etiquetas). Si usted est
usando una versin anterior de PHP, reemplace la lnea con esta:
$a=pr eg_spl i t (' / [ <>] / ' ,$ht ml );
que es menos restrictiva, pero devuelve el mismo resultado si se est tratando con
HTML vlido.
Las etiquetas reconocidas son <B>, <I>, <U>, <A>y <BR>; Las dems se ignoran. El
intrprete tambin usa el mtodo Write(). Se pone un enlace externo de la misma
manera que uno interno (como tercer parmetro de Write()).
Observe que Cell() tambin permite incluir enlaces.
Tablas
Este tutorial se explicar como crear tablas fcilmente.
<?php
require(' f pdf . php' );

class PDF extends FPDF
{
/ / Car gar l os dat os
function LoadDat a($f i l e)
{
/ / Leer l as l neas del f i cher o
$l i nes=f i l e($f i l e);
$dat a=array();
foreach($l i nes as $l i ne)
$dat a[]=expl ode(' ; ' ,chop($l i ne));
return $dat a;
}

/ / Tabl a si mpl e
function Basi cTabl e($header ,$dat a)
{
/ / Cabecer a
foreach($header as $col )
$this->Cel l (40,7,$col ,1);
$this->Ln();
/ / Dat os
foreach($dat a as $r ow)
{
foreach($r ow as $col )
$this->Cel l (40,6,$col ,1);
$this->Ln();
}
}

/ / Una t abl a ms compl et a
function I mpr ovedTabl e($header ,$dat a)
{
/ / Anchur as de l as col umnas
$w=array(40,35,40,45);
/ / Cabecer as
for($i =0;$i <count ($header );$i ++)
$this->Cel l ($w[$i ],7,$header [$i ],1,0,' C' );
$this->Ln();
/ / Dat os
foreach($dat a as $r ow)
{
$this->Cel l ($w[0],6,$r ow[0],' LR' );
$this->Cel l ($w[1],6,$r ow[1],' LR' );
$this->Cel l ($w[2],6,number _f or mat ($r ow[2]),' LR' ,0,' R' );
$this->Cel l ($w[3],6,number _f or mat ($r ow[3]),' LR' ,0,' R' );
$this->Ln();
}
/ / L nea de ci er r e
$this->Cel l (ar r ay_sum($w),0,' ' ,' T' );
}

/ / Tabl a col or eada
function FancyTabl e($header ,$dat a)
{
/ / Col or es, ancho de l nea y f uent e en negr i t a
$this->Set Fi l l Col or (255,0,0);
$this->Set Text Col or (255);
$this->Set Dr awCol or (128,0,0);
$this->Set Li neWi dt h(. 3);
$this->Set Font (' ' ,' B' );
/ / Cabecer a
$w=array(40,35,40,45);
for($i =0;$i <count ($header );$i ++)
$this->Cel l ($w[$i ],7,$header [$i ],1,0,' C' ,1);
$this->Ln();
/ / Rest aur aci n de col or es y f uent es
$this->Set Fi l l Col or (224,235,255);
$this->Set Text Col or (0);
$this->Set Font (' ' );
/ / Dat os
$f i l l =0;
foreach($dat a as $r ow)
{
$this->Cel l ($w[0],6,$r ow[0],' LR' ,0,' L' ,$f i l l );
$this->Cel l ($w[1],6,$r ow[1],' LR' ,0,' L' ,$f i l l );
$this->Cel l ($w[2],6,number _f or mat ($r ow[2]),' LR' ,0,' R' ,$f i l l );
$this->Cel l ($w[3],6,number _f or mat ($r ow[3]),' LR' ,0,' R' ,$f i l l );
$this->Ln();
$f i l l =!$f i l l ;
}
$this->Cel l (ar r ay_sum($w),0,' ' ,' T' );
}
}

$pdf =new PDF();
/ / T t ul os de l as col umnas
$header =array(' Pa s' ,' Capi t al ' ,' Super f i ci e ( km2) ' ,' Pobl . ( en mi l es) ' );
/ / Car ga de dat os
$dat a=$pdf ->LoadDat a(' pai ses. t xt ' );
$pdf ->Set Font (' Ar i al ' ,' ' ,14);
$pdf ->AddPage();
$pdf ->Basi cTabl e($header ,$dat a);
$pdf ->AddPage();
$pdf ->I mpr ovedTabl e($header ,$dat a);
$pdf ->AddPage();
$pdf ->FancyTabl e($header ,$dat a);
$pdf ->Out put ();
?>
[Demo]
Siendo una tabla un conjunto de celdas, lo natural es construirla de ellas. El primer
ejemplo es el ms bsico posible: celdas con bordes simples, todas del mismo tamao y
alineadas a la izquierda. El resultado es algo rudimentario, pero es muy rpido de
conseguir.

La segunda tabla tiene algunas mejoras: cada columna tiene su propio ancho, los ttulos
estn centrados y el texto se alinea a la derecha. Ms an, las lneas horizontales se han
eliminado. Esto se consigue mediante el parmetro bor der del mtodo Cell(), que
especifica qu bordes de la celda deben imprimirse. En este caso, queremos que sean los
de la izquierda (L) y los de la derecha (R). Seguimos teniendo el problema de la lnea
horizontal de fin de tabla. Hay dos posibilidades: o comprobar si estamos en la ltima
lnea en el bucle, en cuyo caso usaremos LRB para el parmtro bor der ; o, como hemos
hecho aqu, aadir la lnea una vez que el bucle ha terminado.

La tercera tabla es similar a la segunda, salvo por el uso de colores. Simplemente hemos
especificado los colores de relleno, texto y lnea. El coloreado alternativo de las filas se
consigue alternando celdas transparentes y coloreadas.
Saltos de lnea y colores
Continuemos con un ejemplo que imprime prrafos justificados. Tambin ilustra el uso
de colores.
<?php
require(' f pdf . php' );

class PDF extends FPDF
{
function Header ()
{
global $t i t l e;

/ / Ar i al bol d 15
$this->Set Font (' Ar i al ' ,' B' ,15);
/ / Cal cul amos ancho y posi ci n del t t ul o.
$w=$this->Get St r i ngWi dt h($t i t l e)+6;
$this->Set X((210-$w)/2);
/ / Col or es de l os bor des, f ondo y t ext o
$this->Set Dr awCol or (0,80,180);
$this->Set Fi l l Col or (230,230,0);
$this->Set Text Col or (220,50,50);
/ / Ancho del bor de ( 1 mm)
$this->Set Li neWi dt h(1);
/ / T t ul o
$this->Cel l ($w,9,$t i t l e,1,1,' C' ,1);
/ / Sal t o de l nea
$this->Ln(10);
}

function Foot er ()
{
/ / Posi ci n a 1, 5 cmdel f i nal
$this->Set Y(-15);
/ / Ar i al i t l i ca 8
$this->Set Font (' Ar i al ' ,' I ' ,8);
/ / Col or del t ext o en gr i s
$this->Set Text Col or (128);
/ / Nmer o de pgi na
$this->Cel l (0,10,' Pgi na ' .$this->PageNo(),0,0,' C' );
}

function Chapt er Ti t l e($num,$l abel )
{
/ / Ar i al 12
$this->Set Font (' Ar i al ' ,' ' ,12);
/ / Col or de f ondo
$this->Set Fi l l Col or (200,220,255);
/ / T t ul o
$this->Cel l (0,6," Cap t ul o $num: $l abel " ,0,1,' L' ,1);
/ / Sal t o de l nea
$this->Ln(4);
}

function Chapt er Body($f i l e)
{
/ / Leemos el f i cher o
$f =f open($f i l e,' r ' );
$t xt =f r ead($f ,f i l esi ze($f i l e));
f cl ose($f );
/ / Ti mes 12
$this->Set Font (' Ti mes' ,' ' ,12);
/ / I mpr i mi mos el t ext o j ust i f i cado
$this->Mul t i Cel l (0,5,$t xt );
/ / Sal t o de l nea
$this->Ln();
/ / Ci t a en i t l i ca
$this->Set Font (' ' ,' I ' );
$this->Cel l (0,5,' ( f i n del ext r act o) ' );
}

function Pr i nt Chapt er ($num,$t i t l e,$f i l e)
{
$this->AddPage();
$this->Chapt er Ti t l e($num,$t i t l e);
$this->Chapt er Body($f i l e);
}
}

$pdf =new PDF();
$t i t l e=' 20000 Leguas de Vi aj e Submar i no' ;
$pdf ->Set Ti t l e($t i t l e);
$pdf ->Set Aut hor (' J ul i o Ver ne' );
$pdf ->Pr i nt Chapt er (1,' UN RI ZO DE HUI DA' ,' 20k_c1. t xt ' );
$pdf ->Pr i nt Chapt er (2,' LOS PROS Y LOS CONTRAS' ,' 20k_c2. t xt ' );
$pdf ->Out put ();
?>
[Demo]
El mtodo GetStringWidth() le permite determinar la longitud de una cadena en el tipo
de letra actual, y se usa aqu para calcular la posicin y ancho del borde que rodea al
ttulo. Despus se establecen los colores (mediante SetDrawColor(), SetFillColor() y
SetTextColor()) y el borde de la lnea se establece en 1 mm (en contra de los 0,2 por
defecto) con SetLineWidth(). Finalmente, imprimimos la celda (el ltimo parmetro a 1
indica que debe colorearse el fondo).

El mtodo usado para imprimir los prrafos es MultiCell(). Cada vez que la lnea llega
al extremo derecho de la celda o aparece un carcter de fin de lnea, se ejecuta un salto
de lnea y se crea automticamente otra celda debajo de la actual. El texto se encuentra
justificado por defecto.

Se definen dos propiedades del documento: ttulo (SetTitle()) y autor (SetAuthor()). Las
propiedades pueden verse de dos maneras. La primera es abrir directamente el
documento con Acrobat Reader, irse al men Archivo, Informacin del documento,
General. La segunda, tambin disponible por la extensin (plug-in) de Acrobat Reader,
es pulsar en el tringulo situado inmediatamente encima de la barra de desplazamiento
de la derecha y elegir Informacin del documento.

Potrebbero piacerti anche