Generar documentos PDF con PHP

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

Es habitual que nuestras aplicaciones deban, en un momento dado, generar documentos PDF, con un informe con información extraida de una base de datos, o con un texto prestablecido, etc.

El documento podemos querer mandarlo al navegador para visualización directa, o permitirle al usuario la descarga cómo un archivo para que se lo guarde en su disco duro, etc.

En el mercado hay varias herramientas PHP que cumplen este cometido. Quizá la más conocida es PDFLib. El problema es que es de pago (y no barata). Afortunadamente hay soluciones open source muy interesantes:

  • FPDF. Es todo un clásico y, durante algunos años, estuvo muy en el candelero. Hoy día se ha quedado obsoleta, por lo engorroso que es componer los documentos PDF. Además, el uso de etiquertas HTML en el documento está bastante limitado.
  • Dompdf. En su momento supuso un paso adelante con respecto a FPDF, ya que está concebida para generar un PDF directamente a patir de un HTML, lo que, sin duda, supone una interesante mejora respecto a la anterior. No obstante, la programación para generar documentos PDF con esta herramienta no es muy amigable, y la documentación que existe en Internet es muy limitada. Los ejemplos no están documentados y, tras varias horas de pruebas, he llegado a la conclusión de que es una opción a descartar.
  • HTML2PDF. Es de lo mejorcirto que he encontrado en Internet. Permite generar documentos PDF directamente a partir de un HTM, con más opciones de etiquetas a incluir que la anterior. Además, es amigable de programar y, aunque la documentación siempre se nos antoja insuficiente, esta librería está suficientemente documentada en su wiki (eso sí, en su versión en inglés; la traducción en español está muy “a medias”, al menos en el momento de redactar este artículo). Sobre esta herramienta trabajaremos.

INSTALANDO HTML2PDF

Lo primero es lo primero. Vamos a descargar la librería de su página oficial, en http://html2pdf.fr/es/default. La última versión disponible, en el momento de redactar este artículo es la 4.5.1 y, aunque los autores aún deberían mejorar algunos detalles, se trata de un producto fiable, robusto, cómodo de usar y muy práctico. Personalmente, me ha gustado mucho.

Una vez descomprimida tu descarga en tu servidor local debes descargar las dependencias. Cómo la librería cuenta con un archivo composer.json, usaremos composer para la gestión de dependencias. Puedes descargarlo de https://getcomposer.org/, donde encontrarás también la forma de instalarlo, según tu sistema operativo. Una vez instalado, abres la consola en el directorio donde desgaste HTML2PDF y ejecutas:

composer install

Esto generará un directorio vendor, conteniendo las dependencias necesarias y un archivo autoload.php.

DE HTML A PDF

Vamos a generar un documento PDF de una forma muy fácil y rápida. Cómo ya lo tenemos todo instalado, vamos a crear un documento llamado generar_pdf.php:

Cómo ves, más breve, fácil y rápido, imposible. Sólo observa los comentarios para ver cómo se genera un PDF.

El cóntenido del PDF está, originalmente, en un archivo HTML. Y aquí si que hay que tener en cuenta algunas cosas. El archivo HTML no llevará las etiquetas <html> ni </html>, ni la sección <head></head>. Tampoco llevará etiqueta <body> ni </body>. En lugar de esto, todo el código irá entre dos etiquetas especiales que usa HTML2PDF: <page> y </page>. Observa el listado de archivo.html:

Además, observa dos secciones especiales, al principio del código:

<page_header>
    Esta es la cabecera de las páginas.
</page_header>
<page_footer>
    Este es el pie de las páginas.
</page_footer>

Con esto definimos una cabecera y un pie de página, que aparecerá en todas las páginas que contenga el documento. Dentro de estas secciones, podemos incluir cualquier contenido válido.

Observa también la línea que abre el HTML:

<page backtop='10mm' backbottom='10mm' backleft='20mm' backright='20mm' footer='page'>

Los cuatro primeros atributos definen los márgenes de página. El último (footer='page') hace que, al pié de cada página, se agregue el número de la misma.

OTRAS POSIBILIDADES INTERESANTES.

Puedes hacer muy fácilmente que en tus documentos PDF se incluya un código QR que se genere dinámicamente. Sólo tienes que incluir una instrucción especial en el HTML, y la librería se encargará de generar el código y renderizarlo en la página. En la parte del HTML que desees el código, incluye lo siguiente:

<qrcode value="http://www.eldesvandejose.com" ec="H" style="width: 50mm; background-color: white; color: black;"></qrcode>

  • El atributo value es para indicar la URL de destino del QR.
  • El atributo ec permite establecer la calidad, mediante los valores L (baja), M (media), Q (normal) y H (alta). Cuanto mayor sea la calidad, lógicamente, más recursos consume la generación del código, pero en la p´ractica no se nota, y queda mejor.
  • En el atributo style se puede establecer el color de fondo y del código (suelen ser de fondo blanco y color negro, que es lo normal), el lado y, si lo deseas, que aparezca sin borde (border:none). Cómo ves, CSS de lo más normalito.

No dejes de visitar la wiki (pulsa este enlace), para conocer más detalles de esta librería que, sin duda, se va a convertir en tu favorita para generar PDF’s.

     

2 comentarios:

  1. Pingback: Gestión de dependencias en PHP: Composer » eldesvandejose.com

  2. No se si se puede realizar esto mismo pero con los campos rellenados del formulario, es decir, hasta ahora lo estoy haciendo con fpdf, pero es muy tedioso el tener que realizar “a mano” el pdf generado. Lo que yo quiero saber es si con html2pdf puedo generar el pdf con los campos que he rellando directamente en el código html (que va programado con php también.
    Me explico, cuando yo pongo:
    Nombre (input text), si ese input text pongo pepito perez, con fpdf puedo hacerlo, pero a mano.

Deja un comentario

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