Tenía la necesidad de convertir archivos HTML a PDF, pero me encontraba trabajando en un sistema Red Hat Enterprise Linux 7 (RHEL 7), donde no era posible instalar Chrome o Chromium para usar el modo headless.
Al encontrarme con la limitación de no poder realizar esta tarea, investigué un poco y descubrí que era posible hacerlo utilizando Java (aunque tengo poca experiencia con el lenguaje). Revisando distintos repositorios, encontré dos opciones interesantes:
- iText html2pdf (versión 6.2.1), que se distribuye bajo licencia AGPL.
- OpenHTMLtoPDF con PDFBox, una alternativa open source, pero limitado a CSS 2.1.
Durante las pruebas, realicé algunas evaluaciones en un entorno Debian 13, utilizando Chrome/Chromium en modo headless y también Wkhtmltopdf. Para facilitar la conversión de archivos HTML a PDF desde la línea de comandos, preparé el siguiente script en Bash:
#!/bin/bash
# Uso: ./html_to_pdf.sh /ruta/al/archivo.html /ruta/de/salida.pdf
HTML_FILE="$1"
PDF_FILE="$2"
# Comprobar que los argumentos no estan vacios
if [[ -z "$HTML_FILE" || -z "$PDF_FILE" ]]; then
echo "Uso: $0 /ruta/al/archivo.html /ruta/de/salida.pdf"
exit 1
fi
# Comprobar que el archivo HTML existe
if [[ ! -f "$HTML_FILE" ]]; then
echo "Error: El archivo HTML '$HTML_FILE' no existe."
exit 2
fi
# Convertir ruta HTML a formato file:// absoluto
ABS_HTML_PATH="$(readlink -f "$HTML_FILE")"
# Ejecutar en modo headless para generar PDF
#chromium-browser --headless --no-sandbox --disable-gpu --print-to-pdf="$PDF_FILE" --virtual-time-budget=5000 "file://$ABS_HTML_PATH"
#chrome --headless --no-sandbox --disable-gpu --print-to-pdf="$PDF_FILE" --virtual-time-budget=5000 "file://$ABS_HTML_PATH"
# Ejecutar wkhtmltopdf para generar PDF
#wkhtmltopdf "$HTML_FILE" "$PDF_FILE"
# Comprobar el resultado
if [[ $? -eq 0 ]]; then
echo "PDF generado correctamente en: $PDF_FILE"
else
echo "Error al generar el PDF."
exit 3
fi
Este script permite automatizar la conversión desde HTML a PDF, eligiendo entre Chrome/Chromium en modo headless o Wkhtmltopdf, según lo que esté disponible en el sistema. Solo hay que descomentar la línea correspondiente al método deseado.
A continuación, os comparto dos proyectos en Java (compatibles con Java 8 o superior) relacionados con la generación de PDF: uno utilizando OpenHTMLtoPDF y otro basado en iText html2pdf.
El proyecto con iText está más desarrollado, ya que le he incorporado varias funcionalidades adicionales pensando en posibles necesidades futuras. De esta forma, queda más completo y no será necesario modificarlo más adelante.
Entre las mejoras incluidas destaca la posibilidad de escalar un PDF, tanto manteniendo el mismo formato como convirtiendo entre diferentes tamaños, por ejemplo, de un A3 apaisado a un A4 vertical.
Además, si necesitáis más información sobre las opciones disponibles, podéis usar el parámetro -h para mostrar la ayuda detallada del programa.
Si necesitáis algún ajuste o mejora en los proyectos, comentádmelo y lo reviso. En caso contrario, puedo compartir directamente el código completo para que lo tengáis disponible.
A continuación, una captura del html2pdf-itext
