Transformando la Generación de Reportes en PDF: De Power Automate a la Eficiencia de HTML y dompdf

  • 2 Sep 2023
  • Power Automate, PHP, html, CSS, PDF

Exordio

En el mundo empresarial actual, la generación de informes y reportes en formato PDF es una tarea esencial. Tradicionalmente, las herramientas como Power Automate se han utilizado para automatizar este proceso, permitiendo a las organizaciones generar documentos PDF a partir de plantillas de Microsoft Word.

Imaginemos por un momento que tenemos una aplicación que a través de Microsoft Power Automate genera un reporte en PDF. Para ello, hace uso de las acciones Populate a Microsoft Word template y Convert Word Document to PDF. Y todo funciona muy bien. El problema es que cuando la cantidad de datos empiezan a no ser menor y la operación empieza a ganar popularidad entre los usuarios, la performance empieza a ganar importancia.

¿Por qué reconsiderar Power Automate y Microsoft Word Templates?

Si bien Power Automate y Microsoft Word Templates han sido una solución efectiva para muchas empresas, presentan algunas limitaciones notables:

1. Baja performance

La velocidad de generación del PDF es muy lenta el documentos con una importante cantidad de datos. En el caso que solo necesitemos el reporte en PDF, necesitamos obligatoriamente generar antes un archivo en Word.

2. Rigidez en la Maquetación

Las plantillas de Word pueden ser rígidas en cuanto a diseño y formato, lo que limita la creatividad y la personalización en la generación de informes.

3. Dificultad para Documentos complejos

Generar informes complejos con múltiples datos dinámicos puede ser complicado en Word Templates.

La Solución: Crear Informes en HTML y Convertir a PDF con dompdf

Aquí es donde entra en juego la creación de informes en HTML y su posterior conversión a PDF utilizando dompdf, una potente biblioteca de PHP. Este enfoque presenta una serie de ventajas significativas:

1. Independencia de Plataforma

HTML es un lenguaje universal y ligero, lo que significa que no se necesita ninguna licencia adicional ni una infraestructura costosa. Puede ejecutarse en prácticamente cualquier servidor web.

2. Flexibilidad de Diseño

La creación de informes en HTML permite un control total sobre el diseño y el formato. Puedes crear informes altamente personalizados y adaptables a tus necesidades específicas.

3. Integración más Sencilla

HTML es altamente compatible con otras tecnologías y sistemas, lo que facilita su integración en tu flujo de trabajo existente.

4. Generación de Documentos Dinámicos

Con HTML, puedes incluir datos dinámicos y actualizados en tiempo real en tus informes, lo que es especialmente valioso para informes en tiempo real o dashboards.

El proceso de adopción de dompdf

Una de las mayores ventajas de adoptar dompdf es su facilidad de uso y versatilidad. El proceso de conversión es relativamente sencillo:

1. Generar un objeto en Power Automate

Para construir un objeto en Power Automate vamos a necesitar ante todo declarar una nueva variable configurándola de la siguiente manera:

  • Name: project_report
  • Type: Object
  • Value: {}

Luego necesitamos generar el código de un objeto que podría ser uno personalizado creado siempre con Compose o la salida de una acción como por ejemplo Parse JSON.

Para crear un objeto personalizado el código dentro un Compose debería ser más o menos así:

{
  "nombre_propiedad": valor,
  "otro_nombre_propiedad": otro_valor
}

Luego vamos a agregar la acción Compose para utilizar la función setProperty en este modo:

setProperty(variables('project_report'), 'project', output_de_record_creado_ateriormente)

Finalmente, necesitamos ejecutar una acción Set variable seleccionando nuestra variable project_report y assignando como valor la salida del Compose donde ejecutamos setProperty.

2. Enviar el objeto a nuestro script en PHP

Todavía en Power Automate vamos a utilizar la acción HTTP con las siguientes opciones:

  • Method: POST
  • URI: La url de nuestro script
  • Body: La variable project_report

3. Recibir el objeto en PHP

<?php

$jsonData = file_get_contents('php://input');
$this_project_report = json_decode($jsonData);

4. Convertirlo a PDF con dompdf

No tiene mucho sentido entrar en detalle porque la wiki de dompdf ya es bastante buena. La cuestión es que nuestro script va a terminar generando un archivo PDF.

use Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->loadHtml($html);
$dompdf->setPaper('a4', 'portrait');
$dompdf->render();
$dompdf->stream();

5. El PDF de dompdf en SharePoint

Si todo salió bien, el resultado de la acción HTTP debería ser un archivo PDF. Así que podemos simplemente utilizar la acción Create file de SharePoint seleccionando body('HTTP') en el parámetro file content

Cómo configurar el encabezado y pié de página con dompdf

Dompdf comienza a renderizar los elementos de nuestro HTML en el orden en que los encuentra. Si deseamos que nuestro resultado final incluya un encabezado y un pie de página, es fundamental que el código HTML de estos elementos se encuentre al principio. Para lograr que Dompdf repita estos elementos en cada página, debemos utilizar el estilo position: fixed.

 

body {
  font-family: Arial, sans-serif;
  font-size: 12px;
  margin: 10mm 0;
}

@page {
    size: 210mm 297mm;
    margin: 20mm;
}

header, footer{
  position: fixed;
  left: 0px;
  right: 0px;
}

header {
  height: 20mm;
  top: 0;
  border-bottom: 4px solid #2F5496;
  margin-top: -20mm;
}

footer{
  height: 30mm;
  bottom: -20mm;
  font-size: 10px;
  border-top: 4px solid #2F5496;
}

Escribir el número de página

Para solicitar a dompdf que muestre el número de página en el pie de página, simplemente debemos crear un contenedor, por ejemplo, un <span> con una clase page_number, y agregar el siguiente código al archivo de estilos:

.page_number:before {
  content: "Page " counter(page);
}