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.
Si bien Power Automate y Microsoft Word Templates han sido una solución efectiva para muchas empresas, presentan algunas limitaciones notables:
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.
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.
Generar informes complejos con múltiples datos dinámicos puede ser complicado en Word Templates.
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:
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.
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.
HTML es altamente compatible con otras tecnologías y sistemas, lo que facilita su integración en tu flujo de trabajo existente.
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.
Una de las mayores ventajas de adoptar dompdf es su facilidad de uso y versatilidad. El proceso de conversión es relativamente sencillo:
Para construir un objeto en Power Automate vamos a necesitar ante todo declarar una nueva variable configurándola de la siguiente manera:
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.
Todavía en Power Automate vamos a utilizar la acción HTTP con las siguientes opciones:
<?php
$jsonData = file_get_contents('php://input');
$this_project_report = json_decode($jsonData);
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();
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
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;
}
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);
}