0

Diseño de reportes en pdf con FPDF y PHP



Diseño de reportes en pdf con FPDF y PHP

Diseño de reportes en pdf con FPDF y PHP FPDF es una librería, más precisamente un conjunto de clases escritas en PHP que permite generar archivos PDF facilitando el trabajo desde PHP, anteriormente se utilizaba la librería PDFlib.

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.

mas tutoriales de informatica y programacion

Temas mas vistos

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:

  1. <?php
  2.  
  3. require(‘pdf/fpdf.php’);
  4.  
  5. $pdf=new FPDF();
  6. $pdf->AddPage();
  7.  
  8. $pdf->SetFont(‘Arial’,‘B’,16);
  9. $pdf->Cell(50,10,‘Probando FPDF’,1,1,‘L’);
  10.  
  11. $pdf->Cell(50,5,‘salto de linea’,1,1);
  12.  
  13. $pdf->SetFont(‘Arial’,‘B’,10);
  14. $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.’);
  15.  
  16. $pdf->Output();
  17.  
  18. ?>

Veamos detalladamente la propiedad Cell, los parámetros son los siguientes

  1. $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 ñ.

  1. $pdf->Cell(50,10,‘Probando FPDF’,0,1,‘L’);
  2.  
  3. $pdf->Cell(50,5,»,0,1);
  4.  
  5. $pdf->SetFont(‘Arial’,‘B’,10);
  6.  
  7. //convertimos el texto a utf8
  8. $texto = utf8_decode(‘Lorem Ipsum ……’);
  9.  
  10. $pdf->MultiCell(190,5,$texto);

El resultado es el siguiente:

Cuando utilizar Cell o Multicell

 

CELL
Sirve para crear una celda, debemos conocer exactamente la longitud del contenido ya que su tamaño no varía por si solo por lo tanto si el contenido es mas ancho saldrá fuera de la celda.

 

MULTI CELL
Sirve cuando tenemos párrafos de texto que no sabemos cuanto espacio ocupa. Así que en lugar de configurar una altura de la celda, estableceremos el ancho y la celda se ajustara a la altura para el texto que se mostrará dentro, variando el tamaño de texto se ajusta la celda 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.

  1. <?php
  2.  
  3. require(‘pdf/fpdf.php’);
  4.  
  5. //Creamos la nueva clase pdf que hereda de fpdf
  6.  
  7. class PDF extends FPDF
  8. {
  9.  
  10. // utilizamos la funcion Header() y la personalizamos para que muestre la cabecera de página
  11. function Header()
  12.  
  13. {
  14.  
  15. // seteamos el tipo de letra Arial Negrita 16
  16. $this->SetFont(‘Arial’,‘B’,16);
  17.  
  18. // ponemos una celda sin contenido para centrar el titulo o la celda del titulo a la derecha
  19. $this->Cell(50);
  20.  
  21. // definimos la celda el titulo
  22. $this->Cell(100,10,‘Encabezado Reporte de Ventas’,1,0,‘C’);
  23.  
  24. // Salto de línea salta 20 lineas
  25. $this->Ln(20);
  26.  
  27. }
  28.  
  29. // utilizamos la funcion Footer() y la personalizamos para que muestre el pie de página
  30. function Footer()
  31.  
  32. {
  33. // Seteamos la posicion de la proxima celda en forma fija a 1,5 cm del final de la pagina
  34.  
  35. $this->SetY(-15);
  36. // Seteamos el tipo de letra Arial italica 10
  37.  
  38. $this->SetFont(‘Arial’,‘I’,10);
  39. // Número de página
  40.  
  41. $this->Cell(0,10,‘Pagina ‘.$this->PageNo().‘/{nb}’,0,0,‘C’);
  42. }
  43.  
  44. }

El número de página se establece mediante la función:

  1. $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.

  1. Base de datos: `mercado`
  2.  
  3. Estructura de tabla para la tabla `productos`
  4.  
  5.  
  6. CREATE TABLE IF NOT EXISTS `productos` (
  7. `id_publicacion` int(11) NOT NULL AUTO_INCREMENT,
  8.  
  9. `idrubro` int(11) DEFAULT NULL,
  10. `idcategoria` int(11) DEFAULT NULL,
  11.  
  12. `idsubcategoria` int(11) DEFAULT NULL,
  13. `imagen1` varchar(255) DEFAULT NULL,
  14.  
  15. `imagen2` varchar(255) DEFAULT NULL,
  16. `imagen3` varchar(255) DEFAULT NULL,
  17.  
  18. `imagen4` varchar(255) DEFAULT NULL,
  19. `imagen5` varchar(255) DEFAULT NULL,
  20.  
  21. `imagen6` varchar(255) DEFAULT NULL,
  22. `precio` decimal(10,2) DEFAULT NULL,
  23.  
  24. `activo` varchar(3) DEFAULT NULL,
  25. `comentario` text,
  26.  
  27. `titulo` varchar(255) DEFAULT NULL,
  28. `stock` int(11) DEFAULT NULL,
  29.  
  30. PRIMARY KEY (`id_publicacion`)
  31. ) 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:

  1. <?php error_reporting(0);
  2.  
  3. require(‘pdf/fpdf.php’);
  4.  
  5. //Conecto a la base de datos
  6. $enlace = mysql_connect(«localhost», «root»);
  7.  
  8. mysql_select_db(«mercado», $enlace);
  9. //Consulta la tabla productos solicitando todos los productos
  10.  
  11. $resultado = mysql_query(«SELECT * FROM productos», $link);
  12.  
  13. //Instaciamos la clase para genrear el documento pdf
  14. $pdf=new FPDF();
  15.  
  16. //Agregamos la primera pagina al documento pdf
  17. $pdf->AddPage();
  18.  
  19. //Seteamos el inicio del margen superior en 25 pixeles
  20.  
  21. $y_axis_initial = 25;
  22.  
  23. //Seteamos el tiupo de letra y creamos el titulo de la pagina. No es un encabezado no se repetira
  24. $pdf->SetFont(‘Arial’,‘B’,12);
  25.  
  26. $pdf->Cell(40,6,»,0,0,‘C’);
  27. $pdf->Cell(100,6,‘LISTA DE PRODUCTOS’,1,0,‘C’);
  28.  
  29. $pdf->Ln(10);
  30.  
  31. //Creamos las celdas para los titulo de cada columna y le asignamos un fondo gris y el tipo de letra
  32. $pdf->SetFillColor(232,232,232);
  33.  
  34. $pdf->SetFont(‘Arial’,‘B’,10);
  35. $pdf->Cell(125,6,‘Titulo’,1,0,‘C’,1);
  36.  
  37. $pdf->Cell(30,6,‘Precio’,1,0,‘C’,1);
  38. $pdf->Cell(30,6,‘Foto’,1,0,‘C’,1);
  39.  
  40. $pdf->Ln(10);
  41.  
  42. //Comienzo a crear las fiulas de productos según la consulta mysql
  43.  
  44. while($fila = mysql_fetch_array($resultado))
  45. {
  46.  
  47. $titulo = $fila[‘titulo’];
  48.  
  49. $precio = $fila[‘precio’];
  50. $imagen=«fotos/».$row[‘imagen1’];
  51.  
  52. $pdf->Cell(125,15,$titulo,1,0,‘L’,0);
  53.  
  54. $pdf->Cell(30,15,$precio,1,0,‘R’,1);
  55. //Muestro la iamgen dentro de la celda GetX y GetY dan las coordenadas actuales de la fila
  56.  
  57. $pdf->Cell( 30, 15, $pdf->Image($imagen, $pdf->GetX()+5, $pdf->GetY()+3, 20), 1, 0, ‘C’, false );
  58.  
  59. $pdf->Ln(15);
  60.  
  61. }
  62.  
  63. mysql_close($enlace);
  64.  
  65. //Mostramos el documento pdf
  66. $pdf->Output();
  67.  
  68. ?>







comparte con tus amigos

codigo fuente

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *