0% encontró este documento útil (0 votos)
746 vistas29 páginas

Manual de FPDF: Guía Completa y Ejemplos

Este documento presenta un manual de referencia para FPDF, una biblioteca PHP para generar documentos PDF. Describe varios métodos como AddPage() para agregar páginas, SetFont() para establecer la fuente, Cell() para imprimir celdas de texto, y Output() para guardar o enviar el documento PDF. También incluye varios tutoriales que muestran cómo agregar cabeceras, pies de página, saltos de línea e imágenes al PDF.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
746 vistas29 páginas

Manual de FPDF: Guía Completa y Ejemplos

Este documento presenta un manual de referencia para FPDF, una biblioteca PHP para generar documentos PDF. Describe varios métodos como AddPage() para agregar páginas, SetFont() para establecer la fuente, Cell() para imprimir celdas de texto, y Output() para guardar o enviar el documento PDF. También incluye varios tutoriales que muestran cómo agregar cabeceras, pies de página, saltos de línea e imágenes al PDF.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

Manual FPDF

FPDF 1.7 Manual de Referencia


AcceptPageBreak - acepta o no un salto de pgina automtico
AddFont - aade una nueva fuente
AddLink - crea una referencia interna
AddPage - aade una nueva pgina
AliasNbPages - define un alias para el nmero de pginas
Cell - imprime un celda
Close - termina el documento
Error - error fatal
Footer - pie de pgina
FPDF - constructor
GetStringWidth - calcula la longitud de la cadena
GetX - obtiene la posicin actual de x
GetY - obtiene la posicin actual de y
Header - cabecera de pgina
Image - imprime una imagen
Line - dibuja un lnea
Link - pone una referencia
Ln - salto de lnea
MultiCell - imprime texto con saltos de lnea
Output - guarda o enva el documento
PageNo - nmero de pgina
Rect - dibuja un rectangulo
SetAuthor - establece el autor del documento
SetAutoPageBreak - establece el modo de salto de pagina automtico
SetCompression - cambia la compresin en activo o inactivo
SetCreator - establece el creador del documento
SetDisplayMode - establece el modo de presentacin
SetDrawColor - establece el color de graficacin
SetFillColor - establece el color de relleno
SetFont - establece la fuente
SetFontSize - establece el tamao de la fuente
SetKeywords - asocia las palabras claves con el documento
SetLeftMargin - establece el mrgen izquierdo
SetLineWidth - establece el ancho de la lnea
SetLink - establece el enlace de destino
SetMargins - establece los mrgenes
SetRightMargin - establece el mrgen derecho
SetSubject - establece el tema del documento
SetTextColor - establece el color del texto
SetTitle - establece el ttulo del documento
SetTopMargin - Establece el mrgen superior
SetX - establece la posicin actual de x
SetXY - establece la posicin actual de x y y
SetY - establece la posicin actual de y
Text - imprime una cadena
Write - imprime el siguiente texto

Tutorial 1

Ejemplo bsico
Comencemos con el clsico ejemplo:
<?php
require('fpdf.php');

$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hola, Mundo!');
$pdf->Output();
?>
[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 Carta y Legal) y otras unidades de medida (pt, cm, in).

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->SetFont('Arial','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->Cell(40,10,'Hola, Mundo!',1);
Para aadir una nueva celda a continuacin, con el texto centrado e ir a la
siguiente lnea, escribiremos:
$pdf->Cell(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, can't send PDF file". Si se enva
despus, su navegador puede que muestre nicamente una pgina en blanco.

Tutorial 2

Cabecera, pie, salto de pgina e imagen
Aqu tenemos un ejemplo de dos pginas con cabacera, pie de pgina y
logotipo:
<?php
require('fpdf.php');

class PDF extends FPDF
{
// Cabecera de pgina
function Header()
{
// Logo
$this->Image('logo_pb.png',10,8,33);
// Arial bold 15
$this->SetFont('Arial','B',15);
// Movernos a la derecha
$this->Cell(80);
// Ttulo
$this->Cell(30,10,'Title',1,0,'C');
// Salto de lnea
$this->Ln(20);
}

// Pie de pgina
function Footer()
{
// Posicin: a 1,5 cm del final
$this->SetY(-15);
// Arial italic 8
$this->SetFont('Arial','I',8);
// Nmero de pgina
$this->Cell(0,10,'Page '.$this->PageNo().'/{nb}',0,0,'C');
}
}

// Creacin del objeto de la clase heredada
$pdf = new PDF();
$pdf->AliasNbPages();
$pdf->AddPage();
$pdf->SetFont('Times','',12);
for($i=1;$i<=40;$i++)
$pdf->Cell(0,10,'Imprimiendo lnea nmero '.$i,0,1);
$pdf->Output();
?>
[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().

Tutorial 3

Saltos de lnea y colores
Continuemos con un ejemplo que imprime prrafos justificados. Tambin
ilustra el uso de colores.
<?php
require('fpdf.php');

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

// Arial bold 15
$this->SetFont('Arial','B',15);
// Calculamos ancho y posicin del ttulo.
$w = $this->GetStringWidth($title)+6;
$this->SetX((210-$w)/2);
// Colores de los bordes, fondo y texto
$this->SetDrawColor(0,80,180);
$this->SetFillColor(230,230,0);
$this->SetTextColor(220,50,50);
// Ancho del borde (1 mm)
$this->SetLineWidth(1);
// Ttulo
$this->Cell($w,9,$title,1,1,'C',true);
// Salto de lnea
$this->Ln(10);
}

function Footer()
{
// Posicin a 1,5 cm del final
$this->SetY(-15);
// Arial itlica 8
$this->SetFont('Arial','I',8);
// Color del texto en gris
$this->SetTextColor(128);
// Nmero de pgina
$this->Cell(0,10,'Pgina '.$this->PageNo(),0,0,'C');
}

function ChapterTitle($num, $label)
{
// Arial 12
$this->SetFont('Arial','',12);
// Color de fondo
$this->SetFillColor(200,220,255);
// Ttulo
$this->Cell(0,6,"Captulo $num : $label",0,1,'L',true);
// Salto de lnea
$this->Ln(4);
}

function ChapterBody($file)
{
// Leemos el fichero
$txt = file_get_contents($file);
// Times 12
$this->SetFont('Times','',12);
// Imprimimos el texto justificado
$this->MultiCell(0,5,$txt);
// Salto de lnea
$this->Ln();
// Cita en itlica
$this->SetFont('','I');
$this->Cell(0,5,'(fin del extracto)');
}

function PrintChapter($num, $title, $file)
{
$this->AddPage();
$this->ChapterTitle($num,$title);
$this->ChapterBody($file);
}
}

$pdf = new PDF();
$title = '20000 Leguas de Viaje Submarino';
$pdf->SetTitle($title);
$pdf->SetAuthor('Julio Verne');
$pdf->PrintChapter(1,'UN RIZO DE HUIDA','20k_c1.txt');
$pdf->PrintChapter(2,'LOS PROS Y LOS CONTRAS','20k_c2.txt');
$pdf->Output();
?>
[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 el documento directamente con Adobe Reader, vaya al men Archivo y
seleccione la opcin Propiedades del documento. La segunda, tambin
disponible desde el plug-in, es hacer clic con el botn derecho y seleccione
Propiedades del documento.

Tutorial 4

Columnas mltiples
Este ejemplo es una variante del anterior en el que se mostrar como disponer
texto en varias columnas.
<?php
require('fpdf.php');

class PDF extends FPDF
{
// Columna actual
var $col = 0;
// Ordenada de comienzo de la columna
var $y0;

function Header()
{
// Cabacera
global $title;

$this->SetFont('Arial','B',15);
$w = $this->GetStringWidth($title)+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,$title,1,1,'C',true);
$this->Ln(10);
// Guardar ordenada
$this->y0 = $this->GetY();
}

function Footer()
{
// Pie de pgina
$this->SetY(-15);
$this->SetFont('Arial','I',8);
$this->SetTextColor(128);
$this->Cell(0,10,'Pgina '.$this->PageNo(),0,0,'C');
}

function SetCol($col)
{
// Establecer la posicin de una columna dada
$this->col = $col;
$x = 10+$col*65;
$this->SetLeftMargin($x);
$this->SetX($x);
}

function AcceptPageBreak()
{
// Mtodo que acepta o no el salto automtico de pgina
if($this->col<2)
{
// Ir a la siguiente columna
$this->SetCol($this->col+1);
// Establecer la ordenada al principio
$this->SetY($this->y0);
// Seguir en esta pgina
return false;
}
else
{
// Volver a la primera columna
$this->SetCol(0);
// Salto de pgina
return true;
}
}

function ChapterTitle($num, $label)
{
// Ttulo
$this->SetFont('Arial','',12);
$this->SetFillColor(200,220,255);
$this->Cell(0,6,"Captulo $num : $label",0,1,'L',true);
$this->Ln(4);
// Guardar ordenada
$this->y0 = $this->GetY();
}

function ChapterBody($file)
{
// Abrir fichero de texto
$txt = file_get_contents($file);
// Fuente
$this->SetFont('Times','',12);
// Imprimir texto en una columna de 6 cm de ancho
$this->MultiCell(60,5,$txt);
$this->Ln();
// Cita en itlica
$this->SetFont('','I');
$this->Cell(0,5,'(fin del extracto)');
// Volver a la primera columna
$this->SetCol(0);
}

function PrintChapter($num, $title, $file)
{
// Aadir captulo
$this->AddPage();
$this->ChapterTitle($num,$title);
$this->ChapterBody($file);
}
}

$pdf = new PDF();
$title = '20000 Leguas de Viaje Submarino';
$pdf->SetTitle($title);
$pdf->SetAuthor('Julio Verne');
$pdf->PrintChapter(1,'UN RIZO DE HUIDA','20k_c1.txt');
$pdf->PrintChapter(2,'LOS PROS Y LOS CONTRAS','20k_c2.txt');
$pdf->Output();
?>
[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 MultiCell() incluye un ancho de 6 centmetros.

Tutorial 5

Tablas
Este tutorial se explicar como crear tablas fcilmente.
<?php
require('fpdf.php');

class PDF extends FPDF
{
// Cargar los datos
function LoadData($file)
{
// Leer las lneas del fichero
$lines = file($file);
$data = array();
foreach($lines as $line)
$data[] = explode(';',trim($line));
return $data;
}

// Tabla simple
function BasicTable($header, $data)
{
// Cabecera
foreach($header as $col)
$this->Cell(40,7,$col,1);
$this->Ln();
// Datos
foreach($data as $row)
{
foreach($row as $col)
$this->Cell(40,6,$col,1);
$this->Ln();
}
}

// Una tabla ms completa
function ImprovedTable($header, $data)
{
// Anchuras de las columnas
$w = array(40, 35, 45, 40);
// Cabeceras
for($i=0;$i<count($header);$i++)
$this->Cell($w[$i],7,$header[$i],1,0,'C');
$this->Ln();
// Datos
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]),'LR',0,'R');
$this->Cell($w[3],6,number_format($row[3]),'LR',0,'R');
$this->Ln();
}
// Lnea de cierre
$this->Cell(array_sum($w),0,'','T');
}

// Tabla coloreada
function FancyTable($header, $data)
{
// Colores, ancho de lnea y fuente en negrita
$this->SetFillColor(255,0,0);
$this->SetTextColor(255);
$this->SetDrawColor(128,0,0);
$this->SetLineWidth(.3);
$this->SetFont('','B');
// Cabecera
$w = array(40, 35, 45, 40);
for($i=0;$i<count($header);$i++)
$this->Cell($w[$i],7,$header[$i],1,0,'C',true);
$this->Ln();
// Restauracin de colores y fuentes
$this->SetFillColor(224,235,255);
$this->SetTextColor(0);
$this->SetFont('');
// Datos
$fill = false;
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]),'LR',0,'R',$fill);
$this-
>Cell($w[3],6,number_format($row[3]),'LR',0,'R',$fill);
$this->Ln();
$fill = !$fill;
}
// Lnea de cierre
$this->Cell(array_sum($w),0,'','T');
}
}

$pdf = new PDF();
// Ttulos de las columnas
$header = array('Pas', 'Capital', 'Superficie (km2)', 'Pobl. (en
miles)');
// Carga de datos
$data = $pdf->LoadData('paises.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();
?>
[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 border 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 usaremosLRB para el parmtro border; 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.

Tutorial 6

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('fpdf.php');

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

function PDF($orientation='P', $unit='mm', $size='A4')
{
// Llama al constructor de la clase padre
$this->FPDF($orientation,$unit,$size);
// Iniciacin de variables
$this->B = 0;
$this->I = 0;
$this->U = 0;
$this->HREF = '';
}

function WriteHTML($html)
{
// Intrprete de 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)
{
// Text
if($this->HREF)
$this->PutLink($this->HREF,$e);
else
$this->Write(5,$e);
}
else
{
// Etiqueta
if($e[0]=='/')
$this->CloseTag(strtoupper(substr($e,1)));
else
{
// Extraer atributos
$a2 = explode(' ',$e);
$tag = strtoupper(array_shift($a2));
$attr = array();
foreach($a2 as $v)
{

if(preg_match('/([^=]*)=["\']?([^"\']*)/',$v,$a3))
$attr[strtoupper($a3[1])] = $a3[2];
}
$this->OpenTag($tag,$attr);
}
}
}
}

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

function CloseTag($tag)
{
// Etiqueta de cierre
if($tag=='B' || $tag=='I' || $tag=='U')
$this->SetStyle($tag,false);
if($tag=='A')
$this->HREF = '';
}

function SetStyle($tag, $enable)
{
// Modificar estilo y escoger la fuente correspondiente
$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)
{
// Escribir un hiper-enlace
$this->SetTextColor(0,0,255);
$this->SetStyle('U',true);
$this->Write(5,$txt,$URL);
$this->SetStyle('U',false);
$this->SetTextColor(0);
}
}

$html = 'Ahora puede imprimir fcilmente texto mezclando diferentes
estilos: <b>negrita</b>, <i>itlica</i>,
<u>subrayado</u>, o <b><i><u>todos a la
vez</u></i></b>!<br><br>Tambin puede incluir enlaces en el
texto, como <a href="http://www.fpdf.org">www.fpdf.org</a>, o en una
imagen: pulse en el logotipo.';

$pdf = new PDF();
// Primera pgina
$pdf->AddPage();
$pdf->SetFont('Arial','',20);
$pdf->Write(5,'Para saber qu hay de nuevo en este tutorial, pulse
');
$pdf->SetFont('','U');
$link = $pdf->AddLink();
$pdf->Write(5,'aqu',$link);
$pdf->SetFont('');
// Segunda pgina
$pdf->AddPage();
$pdf->SetLink($link);
$pdf->Image('logo.png',10,12,30,0,'','http://www.fpdf.org');
$pdf->SetLeftMargin(45);
$pdf->SetFontSize(14);
$pdf->WriteHTML($html);
$pdf->Output();
?>
[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. La URL se pasa como el ltimo parmetro de Image().

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 les expresiones regulares. 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.



Tutorial 7
Aadiendo nuevas fuentes y codificaciones
Este tutorial explica cmo usar fuentes TrueType, OpenType y 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).

Nota: para OpenType, slo es compatible el formato basado en TrueType (no
as el basado en el Type1).

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 dos pasos:
Generacin del fichero de definicin de la fuente
Declaracin de la fuente en el script
Para Type1, es necesario el archivo AFM correspondiente. Por lo general,
ste es provedo con la fuente.
Generacin del fichero de definicin de la fuente
El primer 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
makefont del paquete: makefont.php. Contiene la siguiente funcin:

MakeFont(string fontfile, [, string enc [, boolean embed]])
fontfile
Ubicacin del fichero .ttf, .otf o .pfb.
enc
Nombre de la codificacin. Valor por defecto: cp1252.
embed
Si se incorpora o no la fuente. Valor por defecto: true.
El primer parmetro es el nombre del fichero de la fuente. La extensin debe
ser .ttf, .otf o .pfb y determina el tipo de fuente. Si tiene una fuente Type1 en
formato ASCII (.pfa), puede convertirla a formato binario (.pfb) con t1utils.

Para las fuentes Type1, el archivo .afm correspondiente debe estar presente
en el mismo directorio.

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 adecuados a la
codificacin escogida.

Nota: las fuentes estndar usan cp1252.

Despus de llamar a la funcin (puede crear un nuevo fichero e incluir
makefont.php), se crear un fichero .php con el mismo nombre que la
fuente. 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 $file en el fichero .php consecuentemente.

Ejemplo:
<?php
require('makefont/makefont.php');

MakeFont('c:\\Windows\\Fonts\\comic.ttf','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 la fuente en
lugar del .z.

Otra forma de invocar a MakeFont() es a travs de la lnea de comandos:

php makefont\makefont.php c:\Windows\Fonts\comic.ttf cp1252

Por ltimo, para las fuentes TrueType y OpenType, tambin puede generar
los archivos en lnea en lugar de hacerlo manualmente.
Declaracin de la fuente en el script
El segundo paso es el ms simple. Slo necesita llamar al mtodo AddFont():
$pdf->AddFont('Comic','','comic.php');
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('Comic','B','comicbd.php');
Ejemplo
Veamos ahora un ejemplo completo. Vamos a utilizar la fuente Calligrapher.
El primer paso es la generacin de los archivos de la fuente:
<?php
require('makefont/makefont.php');

MakeFont('calligra.ttf','cp1252');
?>
El script nos devolver el siguiente informe:

Warning: character Euro is missing
Warning: character zcaron 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). Otro carcter
tampoco se encuentra en la fuente.

Alternativamente, podramos haber utilizado la lnea de comandos:

php makefont\makefont.php calligra.ttf cp1252

o haber usado el generado en lnea.

Podemos copiar estos dos ficheros en el directorio de fuentes (font) y escribir
el script:
<?php
require('fpdf.php');

$pdf = new FPDF();
$pdf->AddFont('Calligrapher','','calligra.php');
$pdf->AddPage();
$pdf->SetFont('Calligrapher','',35);
$pdf->Write(10,'Enjoy new fonts with FPDF!');
$pdf->Output();
?>
[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.
Reduciendo el tamao de las fuentes TrueType
Los ficheros de fuentes son con frecuencia bastante voluminosos ; 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 (el ejecutable para Windows
est disponible aqu) especificando la codificacin que le interesa; todos los
dems caracteres sern omitidos.
Por ejemplo, la fuente arial.ttf que viene con Windows Vista tiene un tamao
de 748 KB (contiene 3381 caracteres). Despus de comprimirla, pesa 411 KB.
Convirtmosla a Type1 manteniendo slo los caracteres cp1250:

ttf2pt1 -b -L cp1250.map c:\Windows\Fonts\arial.ttf arial

Los ficheros .map estn en el directorio makefont del paquete. El proceso
devuelve arial.pfn y arial.afm. El fichero arial.pfb ocupa slo 57 KB, 53 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.

También podría gustarte