Módulo E: Reportes Objetivo del Módulo: Facilitar la presentación de información gestionada en el aplicativo, mediante la generación de reportes digitales en los principales formatos de la industria. En el desarrollo de un aplicativo los reportes son importantes para nuestros usuarios, ya que les permiten observar la información almacenada en nuestras bases de datos gracias a lenguajes de back-end como PHP. Las 3 formas comunes de generar reportes son en documento (.docx), hoja de cálculo (.xls ) y formato de documento portátil (.pdf). En el trascurso del módulo observaremos cada una de ellas. 1
1. Reportes en documento (.doc) La generación de reportes.doc con funciones de nativas en PHP es muy sencilla de utilizar. En el archivo. php que contenga la información que deseemos crear como documento de texto (.doc) le añadiremos dos líneas de código PHP al iniciar y listo. Al actualizar nuestro navegador generaremos un documento.doc con el contenido Ejemplo 1: <?php header("content-type: application/vnd.ms-word"); //notifica al navegador por medio de la cabecera que se va a generar un documento header("content-disposition: attachment; filename=reporte.doc"); //permite la descarga del documento con el nombre a nuestro gusto con la extension.doc?> <!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>rerpote.doc</title> </head> <body> <h1>mi primer Reporte en documento</h1> <?php echo "Hola mundo"?> </body> </html> La desventaja de la función nativa es que no aplica ni estilos ni imágenes. Si tu reporte a generar no implica ni estilos ni imágenes es mucho más recomendable utilizar la anterior opción, pero si tu reporte es un poco más avanzado nos apoyaremos en el uso de una librería libre llamada PHPWord. Teniendo en cuenta que los reportes que se generan siempre cuentan con un formato en específico márgenes, imágenes, etc. La comunidad del desarrollo recomienda apoyarse en una plantilla realizada en un procesador de texto; por ejemplo, Word que facilita el proceso. 2
Ejemplo 2 Para crear nuestro reporte en nuestro proyecto vamos a necesitar los siguientes elementos Carpeta con la librería phpword Un archivo llamado ayuda_poo.php que contiene funciones que previamente he creado con el fin de facilitar y automatizar la generación de reportes El archivo index.php con el cual vamos a llamar a nuestras funciones para generar el reporte. Finalmente, nuestro archivo llamado plantilla.docx que hace referencia a la plantilla En nuestro proyecto crearemos y guardaremos nuestro archivo llamado plantilla.docx, que servirá como nuestra base; 3
En los espacios que deseas sean sustituidos sus respectivos valores por medio de PHP escribiremos: ${nombre} -> aquí aparecerá el nombre texto que tu asignes en php ${apellido} -> aquí aparecerá el apellido texto que tu asignes en php Puedes añadir los valores que consideres necesarios y nombrarlos a tu gusto, siempre y cuando recuerdes colocarlos de igual forma en el siguiente archivo Finalmente, en nuestro archivo index.php: <?php //abrimos nuestro php $datos = array( // creamos un array (json) // "campo_plantilla => "valor" "nombre"=> "Andres", //escribimos el campo nombre que escribimos en nuestra plantilla y le asignamos un valor "apellido"=>"paz" // escribimos el campo apellido que escribimos en nuestra plantilla y le asignamos un valor ); include_once('ayuda_poo.php'); //llamamos el archivo de ayuda creado por el asesor con las funciones de reporte $plantilla = "plantilla.docx"; // escribimos el nombre de nuestra plantilla $documento = "reporte.docx"; //escribimos el nombre de nuestro reporte $ruta_documento = "reporte.docx"; //nuevamente escribimos el nombre de nuestro documento ya que se va almacenar temporalmente para que pueda ser generado $misconfig = new reporte($plantilla,$documento,$ruta_documento); //En la variable $misconfig vamos a guardar las configuraciones de plantilla,documento, ruta_documento $misconfig->crear_reporte($datos); //llamamos a la función crear_reporte y le enviamos nuestros datos asignados anteriormente junto con sus configuraciones?><!-- cerramos php--> 4
Al recargar nuestra página se descargar un archivo (reporte.docx) el cual contendrá como resultado. NOTA: Es importante ESCRIIR, NO COPIAR el valor ${campo} en la plantilla, ya que la librería detecta cuando escribimos los valores, si los copiamos y pegamos no va a presentar la información. Se recomienda el manejo de estilos en el mismo archivo para evitar inconvenientes en la presentación de la información 2. Reportes en Hoja de cálculo (.xls) En el caso de los reportes en hojas de cálculo, generalmente el uso que se brinda es con el fin de realizar análisis numéricos y Alfanuméricos, a través de del uso de filas y columnas (tablas) que con software como (Excel) facilitan su administración. Por tal motivo emplearemos la función nativa de PHP. Ejemplo 1: En nuestro archivo index.php crearemos una tabla sencilla y la cual al iniciar el archivo añadiremos dos líneas de código similares a las del documento del paso 1, las cuales permitirán la generación de nuestro reporte. 5
<?php header("content-type: application/vnd.ms-excel"); //notifica al navegador por medio de la cabecera que se va a generar una hoja de calculo header("content-disposition: attachment; Filename=reporte.xls");//permite la descarga de la hoja de cálculo con el nombre a nuestro gusto con la extension.xls?> <!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>mi reporte en xls</title> </head> <body> <table > <tr> <td>identificación</td> <td>nombre</td> <td>apellido</td> <td>dirección</td> </tr> <tr> <td><?php echo "1085290375";?></td> <td><?php echo "Andres" ;?></td> <td><?php echo "Paz";?></td> <td><?php echo "Manzana E";?> </td> </tr> </table> </body> </html> Al actualizar nuestra página se descargará un archivo reporte.xls, el cual al abrir presenta como resultado Observación: En caso de presentarse un aviso de seguridad al abrir el archivo no hay que alarmarse, simplemente presionamos en SI el archivo presenta la información correctamente 6
3. Reportes en Formato de documento portátil (.pdf) En cuanto a la generación de reportes en pdf lastimosamente PHP aún no cuenta con una función nativa similar a lenguajes, Por este motivo es necesario emplear el uso de librerías. Una de las librerías que personalmente me agrada es Dompdf. Para el manejo de nuestro reporte en pdf en nuestro proyecto necesitaremos La carpeta con la librería dompdf El archivo index.php con el contenido del pdf a genrerar Ejemplo 1: En nuestro archivo index.php debemos tener nuestra la estructura del documento html5 o html5+php que queremos generar <!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>pdf</title> </head> <body> <h1>mi primer reporte en PDF</h1> </body> </html> 7
Paso siguiente abrir etiqueta php en la primera línea y llamamos a la librería una sola ves, posterior a ello en una variable de php que para el ejemplo llamaremos $html guardaremos el código html del paso anterior entre comillas sencillas y finalizamos con punto y coma (;). Despues de ello configuraremos los parámetros de la librería <?php require_once 'dompdf/dompdf_config.inc.php'; //llamamos a la libreria dompdf $html=' <!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>pdf</title> </head> <body> <h1>mi primer reporte en PDF</h1> </body> </html>'; # Instanciamos un objeto de la clase DOMPDF. $mipdf = new DOMPDF(); # Definimos el tamaño y orientación del papel que queremos. $mipdf ->set_paper("a4", "portrait"); //para definir la orientación landscape para horizontal y portrait para veritical,en cuanto al tipo de papel letter oficio. # Cargamos el contenido HTML y verificamos los elementos y su códificación $mipdf ->load_html($html,'utf-8'); # Renderizamos el documento PDF. $mipdf ->render(); # Enviamos el fichero PDF al navegador. $mipdf ->stream('ficheroejemplo.pdf', array("attachment" => 0)); #si queremos permitir descargar el fichero dejaremos $mipdf - >stream('ficheroejemplo.pdf'); 8
Finalmente, si queremos añadir código PHP simplemente deberemos cerrar temporalmente la variable $html con comilla sencilla ' y uniremos con punto. el código PHP, cuando terminamos simplemente añadimos punto. y posterior a ello comilla sencilla ' <?php require_once 'dompdf/dompdf_config.inc.php'; //llamamos a la libreria dompdf $html=' <!DOCTYPE html> <html lang="es"> <head> <meta charset="utf-8"> <title>pdf</title> </head> <body> <h1>mi primer reporte en PDF</h1>'. $mivariable = "hola mundo"; $mivariable.' </body> </html>'; # Instanciamos un objeto de la clase DOMPDF. $mipdf = new DOMPDF(); # Definimos el tamaño y orientación del papel que queremos. $mipdf ->set_paper("a4", "portrait"); //para definir la orientación landscape para horizontal y portrait para veritical,en cuanto al tipo de papel letter oficio. # Cargamos el contenido HTML y verificamos los elementos y su códificación $mipdf ->load_html($html,'utf-8'); # Renderizamos el documento PDF. $mipdf ->render(); # Enviamos el fichero PDF al navegador. $mipdf ->stream('ficheroejemplo.pdf', array("attachment" => 0)); #si queremos permitir descargar el fichero dejaremos $mipdf - >stream('ficheroejemplo.pdf'); 9
El resultado sera NOTA: Se recomienda el manejo de estilos en el mismo archivo para evitar inconvenientes en la presentación de la información Ejercicios: En grupos de una cantidad indefinida y utilizando la base de datos egresados.sql ubicada en la carpeta bd en la raíz de modulod, junto al archivo plantilla.docx ubicados en modulod/documento/ejercicio1 generar el certificado del estudiante con id_estudiante 12982143. Certificado que debe quedar similar al de la imagen ejercicio1.png ubicado dentro de la misma carpeta En binas teniendo en cuenta la base de datos egresados.sql encontrada en la carpeta bd generar un reporte de estudiantes en tabla con formato.xls, como se encuentra en la imagen eje1.png ubicada en realizar modulod/ejercicio1 En grupos de una cantidad indefinida teniendo en cuenta el archivo index.html ubicado en modulod/pdf/ejercicio1 y la base de datos 10
egresados.sql mencionada anteriormente, generar el certificado en formato pdf del estudiante con id_estudiante 12982143. certificado como el de la imagen ejercicio1.png dentro de la misma carpeta Bibliografia y Cibergrafia https://github.com/dompdf/dompdf https://github.com/phpoffice/phpword https://secure.php.net/manual/es/index.php 11