udistrital / argo_documentacion

0 stars 0 forks source link

Pruebas generación de minuta desde la plantilla #65

Closed edwargl7 closed 4 months ago

edwargl7 commented 4 months ago

Se requiere realizar la prueba de concepto de las alternativas investigadas en la Issue #57 para generar la minuta desde la plantilla HTML y el estilo CSS, basado en la generación actual de minutas de ARGO. Donde se busca desarrollar un microservicio independiente de generación de PDF basado en las plantillas y datos requeridos.

Especificaciones técnicas

  1. Repositorio de almacenamiento de las pruebas de concepto Prueba_concepto_plantillas_html

Sub Tareas

Criterios de aceptación

Requerimientos

No aplica

Definition of Ready - DoR

Definition of Done - DoD - Desarrollo

Lau2ri commented 4 months ago

WeasyPrint

Se comenzó la prueba de concepto con la librería WeasyPrint de Python y se obtuvo el siguiente PDF de la plantilla de minuta de Contrato de Prestación de Servicios Profesionales o Apoyo a la Gestión con vigencia más reciente encontrada en la base de datos.

Cabe mencionar que se hizo una prueba preliminar reemplazando uno de los parámetros, en este caso el parámetro de NOMBRE_ORDENADOR, reemplazándolo por ABC, y el cambio se hace correctamente sin mayor dificultad:

El resultado obtenido con esta librería es muy bueno.

Observaciones sobre el HTML

Problema que se soluciona pues añadiendo el cierre de la negrilla ( /b ):

Lau2ri commented 4 months ago

Puppeteer

Se siguió con la prueba de concepto de la biblioteca Puppeteer, después de un buen rato de intentos y errores, se llegó a la conclusión de que no es viable utilizar esta biblioteca debido a que es necesario el uso de Chromium-browser para el funcionamiento de la biblioteca y, al parecer, en el entorno virtual WSL que estoy manejando (y que la mayoría de los desarrolladores de la OATI utilizan) está limitado en cuanto al uso y ejecución de estas aplicaciones:

Captura de pantalla 2024-07-09 194749

Este error indica que está utilizando Windows Subsystem for Linux (WSL) versión 1, que tiene algunas limitaciones, especialmente en lo que respecta a la ejecución de aplicaciones gráficas como Chromium:

Captura de pantalla 2024-07-09 194800

Así que por el momento esta biblioteca deberá ser descartada.

Lau2ri commented 4 months ago

Html2pdf

Se siguió con la prueba de concepto de la biblioteca Html2pdf, similar a la anterior, después de un buen rato de intentos y errores, se llegó a la conclusión de que no es viable utilizar esta biblioteca debido a un error encontrado, aparentemente, referente a que Node.js, o por lo menos mi versión, no es compatible con dicha biblioteca:

Captura de pantalla 2024-07-09 205608

Captura de pantalla 2024-07-09 205625

Captura de pantalla 2024-07-09 210623

Así que por el momento esta biblioteca deberá ser descartada.

Lau2ri commented 4 months ago

Wkhtmltopdf

En Python

En primera instancia se trabajo esta librería en Python, este fue el pdf resultado. Una cosa por mencionar es que en este pdf si toma el tamaño de la fuente expresado en el HTML que es de 1px y es por esto que la letra se ve tan diminuta, habría que ajustarlo.

Se realizó la prueba de reemplazo de un parámetro como, en este caso el parámetro de NOMBRE_ORDENADOR, reemplazándolo por ABC, y el cambio se hace correctamente sin mayor dificultad:

Captura de pantalla 2024-07-11 210236

En Node.js

Esta biblioteca también se podía trabajan en Node.js, así que se hizo la respectiva prueba, siendo el resultado prácticamente el mismo pdf, para esta prueba no se alcanzó a probar el reemplazo de parámetros, quedaría pendiente, por lo demás considero que es una opción viable. Se mantiene la observación del ajuste del tamaño de letra que se encuentra en 1px.

Lau2ri commented 4 months ago

PDFKit

Esta es una librería que hace uso de Wkhtmltopdf, pero además tiene la desventaja que por si misma no está diseñada para interpretar HTML a texto, es por esto que la prueba que se hizo con esta biblioteca dio como resultado un texto HTML impreso literalmente sobre el pdf:

Situación que claramente no nos es útil para nuestro objetivo. Además que para corregir esto se deben implementar otras bibliotecas extras (entre las cuales se encuentra Wkhtmltopdf), y no considero que esto sea funcional.

jsPDF

Revisando la documentación de esta biblioteca en diferentes lugares como este encontré que esta biblioteca lo que hace principalmente es tomar como "pantallazos" del HTML e imprimirlos en el PDF, situación que consideré que no nos es útil debido a que se busca que el documento de Nomina sea de texto plano y no de imágenes de texto, debido a esto no se realizó la prueba de concepto porqué no resulta pertinente.

edwargl7 commented 4 months ago

Se realiza una revisión de los resultados obtenidos presentados durante el sprint, se revisa el repositorio con las pruebas de concepto realizadas. Se observa una investigación y prueba de concepto con una buena variedad de alternativas validadas. Además, con varias posibilidades que lograron alcanzar el resultado esperado.

edwargl7 commented 4 months ago

Cumple con lo requerido, se cuenta con la opción de mPDF que es la librería que funciona actualmente en ARGO actual. Buen trabajo.