Ir al contenido principal

Generación de PDFs en Java: Un enfoque práctico usando HTML y iText 🚀

¡Hola, desarrolladores! En el desarrollo de aplicaciones empresariales, es muy común la necesidad de generar documentos en formato PDF de manera dinámica. Ya sea para facturas, reportes o cartas, la capacidad de convertir contenido HTML en un PDF es una habilidad muy valiosa.

En este artículo, te voy a mostrar una forma sencilla y efectiva de crear archivos PDF en Java, utilizando una librería popular como iText. Lo más interesante de este método es que nos permite definir el contenido y la estructura del documento usando HTML, lo que facilita enormemente el diseño y la personalización.

Aquí te presento un ejemplo de código que ilustra el proceso.


Paso 1: Generar el cuerpo HTML del PDF

El primer paso es construir el contenido que queremos convertir a PDF. Lo haremos como si estuviéramos creando una página web, utilizando un StringBuilder para ir agregando las etiquetas HTML. En este ejemplo, creamos una carta básica con la fecha, un saludo y un cuerpo de texto.

/**
 * Obtiene el contenido HTML para la carta.
 * @return String con el contenido HTML.
 */
private String obtainHtmlFile() {
    SimpleDateFormat sdf = new SimpleDateFormat("MMMM dd 'de' yyyy");
    StringBuilder html = new StringBuilder();
    Calendar cal = Calendar.getInstance();
    Date dateNow = cal.getTime();

    html.append("<html>");
    html.append("<head>");
    html.append("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8' />");
    html.append("</head>");
    html.append("<body>");
    html.append("<p>Bogot&aacute;, ").append(sdf.format(dateNow)).append("</p>");
    html.append("<br><br>");
    html.append("<p>Se&ntilde;ora</p>");
    html.append("<p>Pepito Perez</p>");
    html.append("<p>Ciudad</p>");
    html.append("<br><br>");
    html.append("<p>REF: Env&iacute;o de PDF</p>");
    html.append("<p>Cordial Saludo,</p>");
    html.append("<br>");
    html.append("</body>");
    html.append("</html>");

    return html.toString();
}

Este método devuelve una cadena de texto que contiene todo el HTML que se utilizará para el documento. Puedes personalizar este StringBuilder para incluir variables dinámicas, listas, tablas o cualquier otro elemento HTML.


Paso 2: Convertir HTML a PDF

Una vez que tenemos el HTML, el siguiente paso es usar la librería iText para generar el archivo PDF. En este ejemplo, el método generarPDF toma el HTML, crea un documento PDF y lo rellena con el contenido.

/**
 * Genera un archivo PDF a partir de un String HTML.
 * @param dir Directorio donde se guardará el archivo.
 * @param name Nombre del archivo.
 * @return El nombre del archivo PDF generado.
 */
private String generarPDF(File dir, String name) {
    String nameFilePdf = "";
    String bodyHtml = obtainHtmlFile(); // Asumimos que este método ya está definido

    try {
        Document document = new Document(PageSize.A4);
        PdfWriter.getInstance(document, new FileOutputStream(dir.getPath() + "/" + name + ".pdf"));

        document.open();
        document.addCreationDate();

        HTMLWorker htmlWorker = new HTMLWorker(document);
        htmlWorker.parse(new StringReader(new String(bodyHtml.getBytes(), "UTF-8")));

        document.close();
        nameFilePdf = name + ".pdf";

    } catch (Exception e) {
        e.printStackTrace();
    }

    return nameFilePdf;
}

Análisis del código:

  1. Document document = new Document(PageSize.A4);: Creamos un objeto Document de iText y definimos el tamaño de la página, en este caso, A4.

  2. PdfWriter.getInstance(...): Aquí se configura el PdfWriter para que escriba el contenido del documento en un archivo de salida (FileOutputStream).

  3. document.open(): Abre el documento para comenzar a agregar contenido.

  4. HTMLWorker htmlWorker = new HTMLWorker(document);: Creamos una instancia de HTMLWorker, una clase de iText que se encarga de procesar HTML.

  5. htmlWorker.parse(...): Con este método, el HTMLWorker lee el HTML y lo traduce en elementos que pueden ser agregados al PDF.

  6. document.close(): Cierra el documento, guardando el archivo.


Conclusión

Este enfoque te brinda una gran flexibilidad para generar documentos PDF complejos de manera sencilla. Puedes separar la lógica de negocio de la lógica de presentación, ya que el contenido se puede generar en HTML y luego convertir a PDF.

¿Qué otros métodos utilizas para generar PDFs en Java? ¡Comparte tu experiencia en los comentarios y sigamos aprendiendo juntos! 

Comentarios

Entradas Populares

Renombrar una columna en Oracle: Guía rápida y sencilla 💻

¡Hola a todos! En el mundo de las bases de datos, es común necesitar hacer ajustes en la estructura de las tablas, y una de las tareas más frecuentes es renombrar una columna. Ya sea por un error tipográfico, una mejora en la nomenclatura o un cambio en los requisitos, saber cómo hacerlo de manera eficiente es fundamental. Afortunadamente, Oracle facilita esta tarea con una sintaxis simple y directa. A continuación, te muestro cómo puedes renombrar una columna de una tabla en un solo paso. La sintaxis para renombrar una columna Para cambiar el nombre de una columna, utilizamos la sentencia ALTER TABLE . Esta es la forma más segura y recomendada de modificar la estructura de una tabla sin afectar los datos existentes. ALTER TABLE <nombre_de_la_tabla> RENAME COLUMN <nombre_antiguo_del_campo> TO <nuevo_nombre_del_campo>; COMMIT; Análisis de la sintaxis: ALTER TABLE <nombre_de_la_tabla> : Esta parte de la sentencia le indica a Oracle que vas a modificar la estructur...

¿Tu PC no puede instalar la actualización KB5034441? No te preocupes, aquí tienes la solución y la explicación

Sabemos que iniciar el 2024 con problemas técnicos no es lo ideal. Si has intentado instalar la reciente actualización KB5034441 y te has encontrado con el frustrante error 0x80070643 , no estás solo. Este problema ha afectado a muchos usuarios y puede causar una gran confusión, especialmente cuando la descarga parece ir bien, pero la instalación se detiene en 0%. En este artículo, vamos a desglosar qué es lo que está causando este error, por qué no es tan grave como parece y qué pasos puedes seguir para manejarlo. Mensaje de Error Entendiendo el error 0x80070643 en la actualización KB5034441 La actualización KB5034441 está diseñada para reforzar la seguridad de tu entorno de recuperación de Windows (Windows Recovery Environment, WinRE), especialmente para aquellos que utilizan la función de cifrado de disco BitLocker. La intención es buena, pero la implementación ha revelado un problema para ciertos sistemas. El código de error 0x80070643 se traduce como ERROR_INSTALL_FAILURE , y e...