FPDF permite configurar muchos parámetros para dar forma al documento que queramos generar, entre ellas incluyen, el tipo y tamaño de letra, configurar formato y los márgenes de la página. Gestionar el encabezado y pie de página, números de página y muchos parámetros más.
Cómo instalar la librería FPDF en un sitio web
La librería es una clase, para funcionar es necesario PHP 4 como minimo, la mayoria de los servidores ya soportan php 5.3 o 5.4, podemos descargar la librería desde el siguiente enlace: http://www.fpdf.org/
Una vez descargado el archivo zip, lo descomprimimos y pondremos en nuestro servidor, ya sea en local o en el servidor final. Creamos un directorio denominado pdf y alli subimos los archivos de la librería, luego lo incluiremos ya sea desde el backend o desde el frontend.
La instalación no requiere ningún otro requisito, por lo que comprobaremos que resulta bastante sencilla.
Comenzamos con FPDF desde PHP.
Veamos un ejemplo sencillo de como funciona la librería. Crearemos un archivo index.php y dentro podremos el código para mostrar un archivo PDF con un titulo y un texto el código sera el siguiente:
<?php require('pdf/fpdf.php'); $pdf=new FPDF(); $pdf->AddPage(); $pdf->SetFont('Arial','B',16); $pdf->Cell(50,10,'Probando FPDF',1,1,'L'); $pdf->Cell(50,5,'salto de linea',1,1); $pdf->SetFont('Arial','B',10); $pdf->MultiCell(190,5,'Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal manera que logró hacer un libro de textos especimen. No sólo sobrevivió 500 años, sino que tambien ingresó como texto de relleno en documentos electrónicos, quedando esencialmente igual al original. Fue popularizado en los 60s con la creación de las hojas "Letraset", las cuales contenian pasajes de Lorem Ipsum, y más recientemente con software de autoedición, como por ejemplo Aldus PageMaker, el cual incluye versiones de Lorem Ipsum.'); $pdf->Output(); ?>
Veamos detalladamente la propiedad Cell, los parámetros son los siguientes
$pdf->Cell(50,10,'Probando FPDF',1,1,'L');Cell(ancho, Alto, texto, borde, salto de linea, alineacion de texto)
Aclaramos que borde puede tomar los valores 1: con border y 0 sin borde.
Salto de linea 1 saltar linea y 0: no saltar linea. En este caso para que sea comprensible hemos identificado el salto de linea, pero debería ir sin texto y sin borde.
Ahora el mismo codigo pero quitamos los bordes cambiando 1 por cero, y convertimos el tesxto en utf8 para solucionar el problema de tildes y ñ.
$pdf->Cell(50,10,'Probando FPDF',0,1,'L'); $pdf->Cell(50,5,'',0,1); $pdf->SetFont('Arial','B',10); //convertimos el texto a utf8 $texto = utf8_decode('Lorem Ipsum …...'); $pdf->MultiCell(190,5,$texto);El resultado es el siguiente:
Cuando utilizar Cell o Multicell
Podemos utilizar tanto las funciones Cell y MultiCell, en cualquier parte, solo debemos definir qué tipo de letra utilizaremos antes de invocar cada función.
A continuación vamos a crear una cabecera y un pie de página para nuestro documento pdf. Para ello utilizaremos los métodos de FPDF Header() y Footer(), estos métodos son heredados y se ejecutarán automáticamente si están presentes, al crearse la página con AddPage() detecta si los métodos están presentes, sino no los ejecuta. Cada vez que se cree una nueva página los métodos Header y Footer se volverán a ejecutar.
Veamos un ejemplo generando un listado sencillo de venta de productos e importes, además veremos como definir una constante para utilizar como símbolo de moneda.
<?php require('pdf/fpdf.php'); //Creamos la nueva clase pdf que hereda de fpdf class PDF extends FPDF { // utilizamos la funcion Header() y la personalizamos para que muestre la cabecera de página function Header() { // seteamos el tipo de letra Arial Negrita 16 $this->SetFont('Arial','B',16); // ponemos una celda sin contenido para centrar el titulo o la celda del titulo a la derecha $this->Cell(50); // definimos la celda el titulo $this->Cell(100,10,'Encabezado Reporte de Ventas',1,0,'C'); // Salto de línea salta 20 lineas $this->Ln(20); } // utilizamos la funcion Footer() y la personalizamos para que muestre el pie de página function Footer() { // Seteamos la posicion de la proxima celda en forma fija a 1,5 cm del final de la pagina $this->SetY(-15); // Seteamos el tipo de letra Arial italica 10 $this->SetFont('Arial','I',10); // Número de página $this->Cell(0,10,'Pagina '.$this->PageNo().'/{nb}',0,0,'C'); } }El número de página se establece mediante la función:
$this->PageNo()
Vamos a crear un listado de productos en pdf, vamos a tomar los productos desde una base de datos en mysql y mediante php consultamos la base de datos y generaremos el listado en forma dinámica.
Creamos una base de datos Mercado y dentro la tabla productos, no añadiremos la tablas auxiliares de categorías y rubros.
-- -- Base de datos: `mercado` -- -- Estructura de tabla para la tabla `productos` -- CREATE TABLE IF NOT EXISTS `productos` ( `id_publicacion` int(11) NOT NULL AUTO_INCREMENT, `idrubro` int(11) DEFAULT NULL, `idcategoria` int(11) DEFAULT NULL, `idsubcategoria` int(11) DEFAULT NULL, `imagen1` varchar(255) DEFAULT NULL, `imagen2` varchar(255) DEFAULT NULL, `imagen3` varchar(255) DEFAULT NULL, `imagen4` varchar(255) DEFAULT NULL, `imagen5` varchar(255) DEFAULT NULL, `imagen6` varchar(255) DEFAULT NULL, `precio` decimal(10,2) DEFAULT NULL, `activo` varchar(3) DEFAULT NULL, `comentario` text, `titulo` varchar(255) DEFAULT NULL, `stock` int(11) DEFAULT NULL, PRIMARY KEY (`id_publicacion`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;Luego nos conectamos mediante php a la base de datos, consultamos todos los productos y generamos el listado pdf:
<?php error_reporting(0); require('pdf/fpdf.php'); //Conecto a la base de datos $enlace = mysql_connect("localhost", "root"); mysql_select_db("mercado", $enlace); //Consulta la tabla productos solicitando todos los productos $resultado = mysql_query("SELECT * FROM productos", $link); //Instaciamos la clase para genrear el documento pdf $pdf=new FPDF(); //Agregamos la primera pagina al documento pdf $pdf->AddPage(); //Seteamos el inicio del margen superior en 25 pixeles $y_axis_initial = 25; //Seteamos el tiupo de letra y creamos el titulo de la pagina. No es un encabezado no se repetira $pdf->SetFont('Arial','B',12); $pdf->Cell(40,6,'',0,0,'C'); $pdf->Cell(100,6,'LISTA DE PRODUCTOS',1,0,'C'); $pdf->Ln(10); //Creamos las celdas para los titulo de cada columna y le asignamos un fondo gris y el tipo de letra $pdf->SetFillColor(232,232,232); $pdf->SetFont('Arial','B',10); $pdf->Cell(125,6,'Titulo',1,0,'C',1); $pdf->Cell(30,6,'Precio',1,0,'C',1); $pdf->Cell(30,6,'Foto',1,0,'C',1); $pdf->Ln(10); //Comienzo a crear las fiulas de productos según la consulta mysql while($fila = mysql_fetch_array($resultado)) { $titulo = $fila['titulo']; $precio = $fila['precio']; $imagen="fotos/".$row['imagen1']; $pdf->Cell(125,15,$titulo,1,0,'L',0); $pdf->Cell(30,15,$precio,1,0,'R',1); //Muestro la iamgen dentro de la celda GetX y GetY dan las coordenadas actuales de la fila $pdf->Cell( 30, 15, $pdf->Image($imagen, $pdf->GetX()+5, $pdf->GetY()+3, 20), 1, 0, 'C', false ); $pdf->Ln(15); } mysql_close($enlace); //Mostramos el documento pdf $pdf->Output(); ?>
Buenas tardes Sergio, tengo un pequeño problema con la libreria al momento de generar los PDF, y es muy raro no se a que se deba que en algunos equipos de computo solo me respeta las imagenes y no me aparecen nada de las lineas generadas ni texto, pero si lo veo en otro equipo si sale todo correctamente, he tratado tambien verlas al descargar y pasa lo mismo es un error algo aleatorio pero no tengo idea a que se deba, alguna vez te ha pasado?
Saludos y gracias por tu apoyo