Saltar al contenido

¿Cómo Diseñar Reportes en PDF con FPDF y PHP?

10 junio, 2019
Cómo Diseñar Reportes en PDF con FPDF y PHP Paso a Paso

Cuando hablamos de FPDF nos estamos refiriendo a una librería, una especie de conjunto de clases escritas en PHP que nos permite como usuarios generar todo tipo de archivos PDF, lo que nos ahorra a su vez una enorme cantidad de trabajo en PHP.

Una de las claves del éxito que FPDF tiene entre los usuarios se encuentra relacionada con que es posible configurar muchos de los principales parámetros que van a personalizar el documento en cuestión, como el tipo de letra o su tamaño, su formato, márgenes, etc.

Cómo Instalar la Librería FPDF en un Sitio Web

Lo primero que tenemos que considerar cuando hablamos de la posibilidad de instalar FDPF es que estamos hablando de una librería que representa una clase, mientras que para que funcione necesitamos de mínima contar con PHP 4. Por eso, si no lo tienes, comienza instalando PHP.

De todos modos no te preocupes, dado que  la mayoria de los servidores ya soportan PHP 5.3 o 5.4, y en caso de que no cuentes con la librería en tu PC, puedes descargarla de una forma sencilla desde http://www.fpdf.org/.

Una vez que la hayas descargado, te aparecerá el archivo ZIP en el ordenador, que tienes que descomprimir y color en tu servidor local o en el servidor final, creando además un directorio denominado PDF, en el que vas a subir los archivos de la librería. Nada más hace falta para la instalación.

Primeros Pasos con FPDF desde PHP

Para que comiences a acostumbrarte a este sistema, vamos a enseñarte a continuación un sencillo ejemplo de cómo funciona esta librería, creando un archivo index.php, gracias al cual podrás colocar el código para mostrar un archivo PDF con un título y un texto, de este modo:

<?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 o cualquier texto de relleno. .’);

$pdf->Output();

?>
fpdf.jpg

A partir de ello, conviene centrarse detalladamente en la propiedad Cell, que posee estos parámetros:

$pdf->Cell(50,10,’Probando FPDF’,1,1,’L’);

Cell(ancho, Alto, texto, borde, salto de linea, alineación de texto)

Tienes que tener en cuenta en estos casos que el borde puede contemplar los valores 1: con borde y 0 sin borde. De igual modo puedes personalizar los saltos de línea para que se adapten específicamente a lo que te interesa a ti.

De la misma manera, es posible modificar el código para quitarle los bordes, convirtiendo el texto a utf8 para que no haya problemas de tildes o Ñ.

$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);

¿Cuándo utilizar Cell o Multicell?

Sabemos, por otro lado, que muchos usuarios tienen dudas acerca de cuándo utilizar Cell o Multi Cell, y es por eso que en las siguientes líneas queremos enseñarte las diferencias entre ellos, como para que las tengas en cuenta:

  • Cell: sirve para crear una celda, aunque tenemos que conocer exactamente la longitud del contenido para que no quede deforme.
  • Super Cell: útil cuando tenemos párrafos que no sabemos qué tanto ocupan, ya que se adaptarán al contenido las celdas.

En cualquier caso, lo importante es que vamos a poder usar Cell o Super Cell cuando lo consideremos oportuno, así que sólo tienes que definir qué tipo de letra quieres usar en estas celdas antes de invocar la función.

De nuevo, para que no te quedes con las dudas, vamos a enseñarte a continuación cuáles son los pasos que tienes que seguir cuando quieras crear una cabecera o un pie de página para tu PDF, usando los métodos de FPDF Header() y Footer().

La ventaja de estos métodos es que se ejecutan casi de forma automática por lo que el esfuerzo que tenemos que hacer como usuarios es mínimo, y siempre que se pueda ahorrar cuando no tenemos grandes conocimientos informáticos, se agradece.

Un ejemplo pensando en venta de productos con sus precios, sería el siguiente:

<?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’);
}

}
$this->PageNo(Seteramos el número de página)

Una vez que hayamos considerado lo anterior, el paso siguiente tiene que ver con crear un listado de productos en formato PDF, de maneta tal que vamos a tomarlos desde una base de datos en MySQL y gracias a PHP vamos a generar el listado automáticamente.

En este ejemplo no vamos a añadir 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 ;

Considerado lo anterior, lo único que nos falta es conectarnos mediante PHP a la base de datos para consultar todos los productos de este modo:

<?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();

?>.

¿Has podido crear tus primeros reportes PDF con FPDF y PHP gracias a este truco?

¿Nos das 5 estrellas? ?