FPDF (Free PDF)

Esta libreria nos permite crear de una manera muy cómoda y sencilla un documento PDF bastante personalizado: cabeceras, pies de página, colores, imágenes (jpeg, png, gif), saltos de línea, saltos de página y diferentes fonts y codificaciones entre otras cosas.
Podemos realizar incluso referencias al propio documento y poderosas tablas, las cuales pueden venir muy bien para resultados de consultas en bases de datos.

  • Instalación

Descargamos la versión más reciente desde su página oficial, en la cual nos encontraremos un archivo comprimido zip con tutoriales y explicaciones de cada función en particular (también disponibles en la página oficial). El archivo más importante del zip es el llamado fpdf.php aunque también necesitaremos tener en nuestro directorio local, el archivo fpdf.css y la carpeta de font.

  • Errores comunes

Antes de empezar a jugar con esta libreria, comentaré un error que puede aparecernos, para de esta manera, poder evitarlo. Puede que nos saltase un error que nos dijera “Cannot modify header information – headers already sent by …”. Esto es solucionable si en el script en donde vamos a realizar el pdf no introducimos nada antes ni después de los tags de inicio y fin de php, es decir, nada antes ni después de “, , , o cualquier otro). Esto puede ser debido a que esta libreria toca la cabecera de nuestro documento, por lo que no debe de haber nada antes de tal.
Otro error común, sobre todo para los castellano parlantes, puede ser el uso de terminadas letras, como la ñ o las vocales acentuadas. Para ello, suponiendo que nuestro texto se encuentre en una variable, la parsearemos de la siguiente manera:

$str = utf8_decode($str);

Por otra parte, puede que sea un caracter “extraño” como el símbolo del euro. Por ello, para estos casos, los definiremos de la siguiente forma:

define('EURO', chr(128));
 
$str = "Ejemplo de € y " . EURO;
// En nuestro PDF nos muestra lo siguiente: "Ejemplo de ? Y €"
  • Introducción

Para indicar que estamos usando esta libreria, tenemos que hacer referencia al archivo fpdf.php de la siguiente forma:

require("fpdf.php");

Por otra parte, para iniciar la creación del documento PDF, tenemos que indicarlo del siguiente modo:

$pdf=new FPDF();

El funcionamiento a grosso modo es muy simple. Vamos añadiendo páginas y en cada una añadimos lo que queramos. Cuando queramos editar propiedades del tipo colores o fuentes de texto, tenemos que declararlas justo antes de usarlas. Es decir, si queremos hacer dos líneas de texto con fuentes distintas, primero tenemos que declarar las propiedades de la primera fuente, luego escribir la primera línea, declarar las propiedades de la segunda y escribirla.
De igual modo, si alguna vez escribimos algo que ocupe más de una página, esta se añade automáticamente, aunque disponemos de una función (Addpage) para añadir páginas, la cual nos permite acabar de escribir en una página o poner páginas en blanco.
Hay algunas propiedades también, como las cabeceras o los piés de página, que no basta con declarar lo que queremos, sino que hay que realizar la propia función como veremos más adelante. De la misma forma que anteriormente hemos indicado que se iniciaba la configuración del documento pdf, para exportarlo y que salga como tal, dispondremos de otra función que tendremos que aplicar al final (Output).

  • Funciones básicas

Addpage (añade una página), Cell (crea una celda), setFont (declaramos un estilo de fuente), Ln (salto de línea), Image (añade una imagen), setFillColor (establece un color de relleno), setTextColor (establece un color para el texto), SetX (posicionar en el eje X), SetY (posicionar en el eje Y), GetX (obtener posición en el eje X), GetY (obtener posición en el eje Y). Ejemplo:

<?
require("fpdf.php");
 
$pdf=new FPDF();
//Cargamos y creamos el nuevo objeto.
 
$pdf->AddPage();
//Añadimos una página.
 
$pdf->Addpage();
//Añadimos otra página. De esta manera, la primera quedará en blanco.
 
$pdf->SetFont('Arial','B',16);
//Seleccionamos la font de nuestros textos. Serial Arial, Bold, de tamaño 16. Ver fonts permitidas en la línea
//104 del archivo fpdf.php. Los estilos permitidos son B (negrita), U (subrayado), I (cursiva), vacio (normal).
 
$pdf->Cell(10, 20, "Texto interior", 1);
//Creamos una celda de 10 de ancho, 20 de alto, con ese texto en su interior, y 1 de borde.
 
 
$pdf->setFillColor(10, 200, 14);
//Declaramos un color de relleno RGB (verde claro).
 
$pdf->Ln(30);
//Salto de línea de tamaño 30.
 
$pdf->Cell(50, 20, "Otro texto", 2, 2, L, true);
//50 de ancho, 20 de alto, con ese texto, 2 de borde, L de alineado (landscape), y true es el relleno definido antes
//El segundo 2, nos permite decidir dónde irá el elemento posterior a este. En caso de estar en 2, irá debajo.
// Si hay un 1, al comienzo de la línea siguiente. Si hay un 0, irá a la derecha.
 
$variable = $pdf->GetY();
// obtenemos la posición Y.
 
$pdf->SetX($variable);
//Declaro que quiero que el siguiente elemento tenga de posición X, lo que tenía de posición Y.
 
$pdf->Cell(5, 5, $variable, 1);
//Creamos esta celda.
 
$pdf->Image("google.jpg", 80, 0, 70, 40);
//Ponemos una imagen. El segundo y el tercer parámetro son las coordenadas X e Y, los dos siguientes 
//son la anchura y la altura respectivamente.
 
$pdf->Output();
//Función que nos permite obtener el PDF.
?>

  • Funciones más interesantes

En este apartado trataremos de hacer una cabecera y un pie de página para que salgan en todas las páginas. Para esto, hay que extender la clase FPHP como veremos posteriormente de manera que habrá que crear las funciones Footer y Header. Por otra parte, aprenderemos a referenciar objetos dentro del propio documento y establecer el número de páginas totales y actual.

<?php
require('fpdf/fpdf.php');
 
class PDF extends FPDF
{
//Creamos un Class, y dentro de él, extendiendo la función FPDF
//creamos la función Header y Footer
function Header()
{
    $this->SetFont('Arial','B',15);
    //Declaramos una fuente
    $this->Cell(30,10,'Titulo',1,0,'C');
    //Titulo
    $this->Ln(20);
	//Salto de línea
}
 
//Pie de página
function Footer()
{
 
    $this->SetY(-15);
    //Posición: a 1,5 cm del final
    $this->SetFont('Arial','I',8);
 
    $this->Cell(0,10,'Página '.$this->PageNo().'/{nb}',0,0,'C');
	//PageNo nos muestra el número de página actual
	//El "/{nb}" es para que nos muestre el número de páginas máximo
	//de tal forma que se quede del tipo "Página 1/2"
	//Esto es debido a la función posterior "AliasNbPages"
}
}
 
//Creación del objeto de la clase heredada
$pdf=new PDF();
$pdf->AliasNbPages();
//Es la función que nos declara un Alias por defecto para 
//obtener el número de páginas máximo
 
$pdf->AddPage();
$link = $pdf->AddLink();
//Establecemos el link
 
$pdf->Write(5, "Pulsar aquí", $link);
//Al pulsar en ese texto, nos linkeamos gracias al link declarado anteriormente
 
$pdf->AddPage();
$pdf->AddPage();
$pdf->SetLink($link, 70);
//Establecemos el link a 1,5 centímetros (eje Y)
 
$pdf->Output();
?>

Para finalizar, decir que hay multitud de funciones para un uso más intensivo y completo de esta libreria que se encuentran en la parte de “Manual” su página web. En estas breves páginas he intentado escribir las más importantes y útiles para un sencillo uso.

Saludos, lipman.