Cuando tenemos una aplicación web, es muy común que tengamos que generar un archivo PDF con datos extraídos de una base de datos para crear por ejemplo: informes, catálogos, facturas, documentos, etc.
El uso de algunas de estas librerías para PHP puede llegar a ser demasiado complicado, así que vamos a hacer uso de la librería mPDF que nos permite generar PDFs en base a un código HTML y CSS.
Los resultados que vamos a obtener van a ser muy buenos en función del código HTML usado, aunque también podemos usar otras librerías más complejas pero con resultados más profesionales como es el caso de ezPDF, aunque para un sencillo ejemplo mPDF nos será suficiente.
Generando PDFs dinámicos con mPDF en base a un código HTML y CSS
Con mPDF podemos seleccionar múltiples opciones, como la resolución del documento generado, añadir fuentes propias o incluso hacer uso de CSS3. A continuación vamos a mostrar un pequeño ejemplo que especificamos la cabecera, cuerpo y pie del documento.
<?php $cabecera = "<span><b>Mi primer documento PDF dinámico con mPDF</b></span>"; $cuerpo = "<html> <body> <br/> <h1>¡Hola mundo!</h1> <br/> <div> <p>A continuación mostramos algunos <u>datos</u></p> <table style='width:200px;text-align:center;'> <thead> <tr> <th>A</th> <th>B</th> </tr> </thead> <tbody> <tr> <td>1</td> <td>2</td> </tr> <tr> <td>3</td> <td>4</td> </tr> </tbody> </table> </div> <div> <p>Aquí podemos introducir datos dinámicos desde PHP</p> </div> </body> </html>"; $pie = "<span> <a href=\"http://www.imaginanet.com\">Diseño y Programación Web: Imaginanet</a> - <i>Creado ".date("d/m/Y")."</i> </span>"; include("mpdf/mpdf.php"); $mpdf=new mPDF(); $mpdf->SetHTMLHeader($cabecera); $mpdf->SetHTMLFooter($pie); $mpdf->WriteHTML($cuerpo); $mpdf->Output(); ?>
Como podemos ver, es más complicado la maquetación que el uso de PHP. En la maquetación podemos hacer uso de todos los tags HTML, aunque no tienen un comportamiento 100% al de un navegador, así que deberemos adaptarnos a la salida que mPDF produce.
Podéis ver el resultado final del documento PDF generado dinámicamente mediante PHP en este enlace.
Automatizando nuestro script
Es muy común que cuando generamos un catálogo este sea muy pesado. Mediante mPDF, si se trata de un catálogo de unas cincuenta páginas puede tardar fácilmente unos 30 o 40 segundos en generarlo si este tiene un buen número de imágenes. Si nuestra web tiene una gran cantidad de tráfico y sumado a indexación que realizan los buscadores, puede afectar al rendimiento de nuestro servidor.Para solucionarlo, una buena opción es generar estos documentos automáticamente cada cierto tiempo, como por ejemplo una vez a la semana o una vez al día, y que la descarga se produzca sobre un archivo estático.
Linux
Vamos a hacer uso de la herramienta crontab, un sencillo ejemplo podría ser añadir la siguiente línea a nuestro archivo /etc/crontab:
50 8 * * 1 root php /var/www/vhosts/test-domain.yy/httpdocs/cron/generacion_pdf.php
Esto ejecutaría todos los lunes a las 8:50 de la mañana el archivo /var/www/vhosts/test-domain.yy/httpdocs/cron/generacion_pdf.php como el usuario root.
Plesk
Dentro del dominio donde corra nuestro script, tenemos un apartado de tareas programadas que guarda el mismo formato que el crontab de Linux.
Comentarios