Archivo

Archivo para Noviembre, 2008

Crea archivos PDF como si fueran una página Web

Miércoles, 26 de Noviembre de 2008

Un requerimiento común en los proyectos es la generación de reportes de los datos almacenados dentro de la aplicación. Lamentablemente las herramientas disponibles en PHP para la generación automática de reportes es bastante limitada, y posiblemente el único formato que disponemos para la presentación de estos datos de una manera agradable es el PDF.

Sin embargo, la generación de PDF es bastante tediosa, usualmente las librerías de PHP disponibles para la generación de estos archivos requieren manipular detalles como celdas, píxeles, posiciones absolutas en las coordenadas X e Y, etc. Realmente, muy poco ágil.

Afortunadamente existe una de las herramientas más increibles que haya encontrado navegando en la web: DOMPDF, esta librería permite convertri cualquier página web en un archivo PDF, practicamente con ningún esfuerzo. Es realmente impresionante, incluso tiene soporte para archivos externos css, tipos de letras, y no depende de ninguna extendión de php.

DOMPDF soporta declaraciones básicas de CSS 2.1, los grandes faltantes son position y float, lo cual hará que el diseño de tus HTML para la generación automática de PDF, se parezcan más a algo hecho en Dreamweaver.

Sin duda, las horas que ahorra esta librería son innumerables. Puedes tener una versión html de tu reporte para ser visualizada con el explorador, y usar el mismo código para la versión PDF.

La magia no termina aquí. He escrito además un helper para mi framework favorito, cakephp, que facilita en gran medida la utilización de esta librería. Aquí cómo usarlo:

  • Descarga DOMPDF y coloca el contenido dentro de app/vendors/dompdf. Destro de esta carpeta debería estar el archivo dompdf_config.inc.php
  • Descarga el helper desde su repositorio y colócalo en app/views/helpers
  • Abre el archivo app/routes.php y coloca esta línea: Router::parseExtensions(‘pdf’) al principio de este archivo. Esto hará que las solicitudes como /personas/listar.pdf sean pasadas a traves del layout de pdf y se genere el archivo.
  • Agrega RequestHandler a la lista de componentes de tu controlador, si es que no está incluido aún.
  • Crear el layout: haz un nuevo archivo en app/views/layouts/pdf/default.ctp y coloca tu layout html como quieres que se vea en tu pdf. Haz uno sencillo. Puedes guiarte del layout por defecto que tengas. Aqui tienes un ejemplo. Observa las lineas adicionales al final. Esto hará que se genere correctamente el archivo.
  • Crea la vista correspondiente en la carpeta pdf corerspondiente, por ejemplo: app/views/solicitudes/pdf/ver.ctp.
  • Solicita el url correspondiente con la extension .pdf al final
  • Disfruta :)

Tecnología , ,