domingo, 22 de abril de 2012

Generar reporte PDF con HTMLDOC y PHP en un Servidor Debian


Los reportes para los sistemas web son realmente un dilema ya que es dificil adaptar una configuración estandar por la variedad de Navegadores web que existen, es por esto que se toma como solución generar un archivos PDF para la emisión de informes. Una de las soluciones mas rapidas es usar el HTMLDOC, ya que no es necesario aprender nuevas sintaxis para generar los mismos, a continuación se explica como generar los reportes con esta herramienta.

Se debe instalar la aplicación HTMLDOC, para esto ingresamos a un terminal como superusuario e ingresamos en siguiente comando:
# aptitude install htmldoc
 
Después de instalar el paquete podemos empezar a trabajar, se debe tomar en cuenta que el mismo va a constar de 3 archivos de gran importancia, el primero es donde tenemos el reporte que se desea convertir en este caso lo llamaremos alumnos.php, el segundo sería la función que se encargará de generar el pdf la cual la vamos a llamar generar_pdf.php, el tercero es un archivo html en blanco el cual se va a encargar de cumplir la función de plantilla, a este lo llamaremos template.html:
  • Archivo 1 (alumnos.php):
<?php 
//aca se encuentra la  conexión con el servidor y el archivo de la función 
para generar el pdf
include("conexion.php");
include("generar_pdf.php");

//consulta que va permitir mostrar los alumnos de forma dinamica
$consulta= mysql_query("SELECT   * from alumnos ");

//contenido html y php que hace mostrar el reporte el mismo debe ir todo igualado 
a una variable como se muestra a continuación

$html="<html>
<head> </head>
<body>
<table>
<tr> <td>  cedula </td> <td> nombres </td> </tr> 
";
while($fila=mysql_fetch_array($consulta))
{ $x.= "<tr> <td>".$fila['ced_alumno']."</td> <td>".$fila['nom_alumno']."</td> </tr>"; }
$html.= $x;
$html.="</table>

</body>
</html>";

//nombre del archivo que se va a generar              
$nom_pdf='alumnos_plantel.pdf';

//llamado de la función donde le pasamos el contenido de reporte y el nombre del archivo 
a generar.
generar_pdf($html,$nom_pdf);         

?>
  • Archivo 2 (generar_pdf.php)
<?php 

//aca empieza la función para generar el pdf 

 function generar_pdf($html,$nom_pdf) 
     {
       //este es el nombre del tercer archivo que lo usaremos como plantilla
       $archivo_temporal = "template.html";

       $fileHandle = fopen($archivo_temporal, 'w') or die("No se ha podido crear el archivo");
       fwrite($fileHandle, $html);
       fclose($fileHandle);
       putenv("HTMLDOC_NOCGI=1");
       header("Content-Type: application/pdf");

       //aca hace referencia al nombre del archivo que se va a generar            
       header("Content-Disposition: attachment; filename=".$nom_pdf."");

       //opciones de sobre la configuración de reporte
       passthru("htmldoc --embedfonts --format pdf --left 2.5cm --right 1.5cm --top 1.5cm 
             --bottom 1.5cm "."--headfootsize 5 --header 'l' --footer 't' '/' " .
            "--logoimage ../Imagenes/SCELogo.png --linkcolor '#0000FF' " .
            "--size 'a4' --fontsize 10 --bodyfont Verdana --charset 8859-15 " .
            "--webpage '$archivo_temporal'");
    }

?>
  • Archivo 3 (template.html) a este archivo se deja completamente en blanco solamente se guardar con la extención html.
  • Luego lo que queda es hacer el llamado del archivo 2 por medio del la URL de su servidor web.
  • Exitos...