Html to PDF con Java

Si tienes tu xhtml listo, entonces podrás usar esta librería Flying Saucer que proporciona una manera simple para la transformación.

Si no tienes un html que sea válido, tendrás que usar alguna herramienta como Tidy para convertir tu html en un xhtml (al final te dejo un ejemplo).

¿Cómo convertir html a pdf con Java? Para convertir html a pdf con Java necesitas primero que el html sea un html válido del tipo XHTML

Necesitas en tu proyecto estas librerías:

Este es un ejemplo sencillo que transforma código html en pdf.


//--

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

import org.xhtmlrenderer.pdf.ITextRenderer;

public class HtmlToPdf {

    public static void main(String[] args) throws Exception {

        File inputFile = new File("holaMundo.xhtml");
        OutputStream os = new FileOutputStream(new File(
                "xhtmlToPdf_holaMundo.pdf"));

        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocument(inputFile);
        renderer.layout();
        renderer.createPDF(os);

        os.close();
    }

}

//--

Este es nuestro xhtml de entrada “holaMundo.xhtml”

<p>
  <b>HOLA MUNDO... !</b>       
</p>
<p>
  ...Un sutil pensamiento erroneo puede dar lugar a una indagacion fructifera que revela
              verdades de gran valor......
</p>

Este será nuestro resultado:

xhtmlToPdf_holaMundo

Si bajas el source encontraras buena documentación y ejemplos.

Una observación:

Si tu xhtml tiene hojas de estilo (CSS), deberás indicarlas con su URL absoluto para que puedan ser procesadas por la librería.

<link rel="stylesheet" type="text/css" href="tusitio.com/css/style.css" />

Te dejo este ejemplo sobre cómo pasar tu html a un xhtml utilizando la libreria Tidy:

//--
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import org.w3c.tidy.Tidy;

public class HtmlToXhtml {

    public static void main(String[] args) {

        // codigo valido para html pero invalido para XHTML
        // no esta cerrando el tag img
        String html = new String("<img scr='img.gif' />");
        //--
        ByteArrayInputStream b = new ByteArrayInputStream(html.getBytes());
        ByteArrayOutputStream out = new ByteArrayOutputStream();

        Tidy tidy = new Tidy();
        tidy.setXHTML(true); // queremos que la salida sea xhtml
        tidy.parse(b, out);
        System.out.println(out.toString());

}
}
//--

La salida de Tidy para este ejemplo es la siguiente.

Vemos que Tidy le ha agregado cabeceras, y otros tag; además de cerrar correctamente el tag ‘img’.

<img scr='img.gif' />

Espero te sea de utilidad.

Hi! If you find my posts helpful, please support me by inviting me for a coffee :)
Java 

Ver también