PDFS en PHP con DomPDF, HTML y CSS

Es muy Fácil crear pdfs con PHP. En 5 minutos habrás generado el tuyo con este tutorial de creación de pdf mediante PHP y HTML

Generar PDF librerias php Ficheros en php Programacion web

En este tutorial vamos a ver paso a paso como podemos generar PDFs de forma sencilla con PHP, HTML y CSS. 

¿Cómo obtener PDFs utilizando PHP?

PDF de forma nativa no soporta la creación de PDFs, por lo tanto, debemos recurrir a una librería pensada a propósito para este fin. Entre las librerías que podemos encontrar he elegido, para este tutorial, DOMpdf, una librería open-source que proporciona una buena solución al problema que suele ser tratar con este formato de ficheros.

Dompdf es una fantástica librería, capaz de generar un PDF desde contenido en lenguaje HTML y estilos CSS (principalmente CSS 2.1 y con soporte para algunas propiedades CSS3). Como verás tienes la posibilidad de darle un diseño a tus ficheros PDF con el uso de estos lenguajes de marcado de forma similar a como lo haríamos para generar una página web.

Como empezar a formar un pdf con PHP

Dompdf, como software libre que es, está disponible en GitHub y puede ser instalado también con Composer. Vamos a ver rápidamente las 3 formas de incluir la librería en nuestros proyectos.

Usar DomPDF a través de su descarga

La primera forma para trabajar con Dompdf pasa por su descarga desde GitHub: descargar la librería desde GitHub. Una vez tengas el archivo .zip en tu ordenador, descomprímelo en el directorio que utilices para las librerías. Después, tan solo tienes que incluir el fichero autoload.inc.php que se encuentra en el directorio de la librería en el script dónde vayas a utilizarlo:

require_once 'dompdf/autoload.inc.php';

DomPDF con comandos de Git

Si te encuentras a gusto lidiando con Git y su terminal puedes incluir la librería de la siguiente forma:

  • Navega por el explorador de ficheros hasta el directorio donde desees incluir la librería.
  • Abre la terminal de Git
  • Ejecuta los siguientes comandos:
    • git clone https://github.com/dompdf/dompdf.git
    • cd dompdf
    • git clone https://github.com/PhenX/php-font-lib.git lib/php-font-lib
    • cd lib/php-font-lib
    • git checkout 0.4
    • cd ..
    • git clone https://github.com/PhenX/php-svg-lib.git php-svg-lib
    • cd php-svg-libgit checkout v0.1
  • Incluye ahora librería en el script de programación donde vayas a crear tus PDF:
    • require_once 'dompdf/autoload.inc.php';

DomPDF con composer

Con composer tan solo necesitarás ejecutar el siguiente comando en el directorio raíz de tu proyecto:

composer require dompdf/dompdf

Requisitos previos para utilizar DomPDF 

Antes de ponerte a pelearte con DomPdf y generar PDF debes tener en cuenta varias limitaciones y requisitos para su total compatibilidad:

  1. La librería de DomPdf requiere una versión de PHP superior a 5.3. En principio, este punto lo cumplirá cualquier instalación reciente de XAMPP, WAMP o LAMP. 
  2. Puedes utilizar etiquetas HTML pero nunca HTML5.
  3. Las hojas de estilo pueden ser escritas en CSS, hasta la versión CSS 2.1. Algunas propiedades pertenecientes a la versión más reciente, CSS3, también son compatibles, aunque su cantidad es muy reducida. 
  4. DOMPDF está programado con POO (programación orientada a objetos), y aunque no es completamente necesario dominar este tipo de programación para hacer uso de la librería, si que te aconsejo que tengas al menos nociones básicas de crear objetos y utilizar sus métodos.

Ejemplo básico de crear PDF con DomPDF

Una vez instalada la librería en nuestro proyecto, y correctamente incluida, vamos a ver un ejemplo sencillo para generar tu primer PDF.

Lo primero que debes hacer es crear un objeto de la clase DOMPDF. Este objeto será el que en todo momento controle la construcción y posterior renderización del PDF. También estableceremos que el tamaño de papel a usar será A4 con el método set_paper() de la clase DOMPDF.

<?php
$dompdf = new DOMPDF();
$dompdf->set_paper("A4");

En segundo lugar, tienes que almacenar en una variable PHP una salida HTML, es decir, guardar una hoja HTML parecida a lo que sería una página web. Para esto podemos hacer uso de un buffer PHP:

ob_start();
include 'mi_template_html_de_pdf.php';
$html_para_pdf = ob_get_clean();

Una vez tenemos nuestro HTML en el interior de la variable lo cargaremos en el objeto DOMPDF con el método load_html() de DOMPDF. 

$dompdf->load_html($html_para_pdf);

¡Ya casi lo tienes! Tan solo falta indicar que queremos que se transforme el HTML a un fichero PDF válido, guardarlo o visualizarlo.

$dompdf->render(); //este comando renderiza el PDF
$output = $dompdf->output(); //extrae el contenido renderizado del PDF
file_put_contents('mipdf.pdf', $output); //guarda el PDF en un fichero llamado mipdf.pdf

Extra: Funciones avanzadas para generar PDF

Dompdf dispone de muchas más funcionalidades que las vistas en el ejemplo anterior, algunas de ellas serían:

  • Establecer la fuente por defecto del PDF creado: $dompdf->set_option('defaultFont', 'Courier'); 
  • Obtener el alto del documento PDF$dompdf->get_height()
  • Obtener el ancho del documento: $dompdf->get_width()
  • Mostrar el pdf directamente en la salida HTML de la página web: $dompdf->render('nombre_pdf.pdf', array('Attachment'=>false))
  • Establecer un tamaño del documento personalizado$dompdf->set_paper(x, y, ancho, alto)

Conclusión: Es muy fácil generar PDFs en PHP

En este artículo hemos visto cómo, de forma sencilla, como se pueden generar PDFs trabajando con los mismos lenguajes que utilizar nuestras páginas web.

También, aunque DomPDF es una buena librería, hay que tener especial cuidado, ya que no tolera documentos HTML mal formados.

Además, hay que tener especial cuidado generando PDFs de gran tamaño, ya que el servidor se quedará sin memoria en un santiamén. 

 Recomendaciones para crear tus PDF sin errores

No me gustaría terminar este artículo sin apuntar unos cuantos datos importantes para que generes tus PDF con la mínima cantidad de errores posibles:

  1. Intenta utilizar Tablas HTML para estructurar los datos. A DomPDF no le acaba de gustar las propiedades CSS3 como Float.
  2. Si vas a generar PDFs muy grandes asegúrate que la configuración de PHP acepte grandes cantidades de reserva de memoria. Haz esto con precaución, el servidor podría responder de forma lenta.
  3. Genera la estructura de tus PDF de forma similar a como lo harías en una página web normal. Utiliza las etiquetas completas de HTML, HEAD y BODY e utilizar CLASES e IDs para aplicar estilos como fuentes, colores o espaciados.
  4. Compón el HTML y CSS de tu PDF con ficheros reservados para este fin, es decir, un fichero php con la finalidad de ser una plantilla.
  5. Ante errores revisa siempre que la estructura HTML está debidamente marcada y no has dejado etiquetas sin cerrar o con atributos sin utilizar de forma correcta.

Sobre el autor

Javier Gómez Redactor en Srcodigofuente.es

Javier Gómez

Ingeniero técnico en informática de gestión. Desarrollador web freelance y profesor de desarrollo web a partes iguales. Testarudo autodidacta, creativo, perfeccionista y alma libre.

Cargando comentarios

Utilizamos "cookies" para información estadística. Si continúas navegando aceptas su uso.