¿Cómo crear una factura en formato PDF rápidamente con PHP y Dompdf?

Image de persona facturando

José Amaya

Desarrollador de Software

Me encontraba entendiendo las bases de composer para poder usar de la misma manera que uso NPM y tuve la duda de que tan dificil sería integrar paquetes de software.

Entonces encontre un paquete genial llamado Dompdf que me encanto la forma y el trabajo que hace para generar plantillas HTML en formato PDF.

Idea para monetizar:
Crear un sistema que reciba información en formato JSON (un servicio web, una API con Laravel, lo que quieras) y posteriormente a eso venderlo a diferentes usuarios que requieran de esta funcionalidad como es el caso de tiendas en linea que muchas veces requieren cotizar a sus clientes.

Hosting Gratuito para probar:

Free PHP Hosting 000webhost

Bien, vamos al código:

Paso 1: Ejecuta el instalador de Composer para dompdf

 composer require dompdf/dompdf

The Dompdf documentation: Dompdf Documentation

Paso 2: Cargar el vendor.autoload.php package

require 'vendor/autoload.php';

Paso 3: Instanciar la clase principal para aprovechar las utilidades


// Cargar paquete para usar el modulo de Dompdf
use Dompdf\Dompdf;
use Dompdf\Options;

Ahora, debes crear una instancia y asignarla a una variable


$dompdf = new Dompdf();

También tienes que habilitar la obtención origenes remotos para imagenes desde otros sources

Si se te olvida habilitarlo, verás que aparecerá un icono de vacio en lugar de una imagen


$options = new Options();
$options->set('isRemoteEnabled', true);
$dompdf = new Dompdf($options);

Paso 4: Crear la plantilla html y almacenar dentro de una varible en formato de texto


$htmlTemplate = htmlTemplateText;

Si necesitar pasar valores dinamicos a la plantilla usa este formato:


'.$contenidoDinamico.'

En caso de automizar el proceso de creación de tablas o crear ciclos repetivos para hacer mas dinamica la plantilla concatena los strings antes de inyectar la variable al metodo de loadHtml (htmlinfo.= 'bucleGetInfo') o usar un array para ir haciendo mas dinamico el recorrido de las variables o integrate con un motor de renderizado HTML como swig o blade de Laravel.

Paso 5: Carga el contenido HTML con los estilos usando sl siguiente método:


$dompdf->loadHtml($content);

Paso 6: Especifica el tamaño y la orientación de la HOJA del documento PDF


$dompdf->setPaper('A4','portrait');

Paso 7: Ahora toca compilar y fusionar el HTML con el formato de documento de imagen PDF que se hace cargo el método:


$dompdf->render();

Paso 8: Utiliza la funcionalidad de almacenamiento temporal o persistente para enviar el archivo PDF el usuario solicitando o guardarlo en una ubicación que le permita al usuario poder visualizarlo o descargarlo.


$dompdf->stream($fileName);

Resultado final:

Link al repo