En Java, a través de la librería iText puedes generar PDF manualmente con sus funciones desde código o bien desde HTML a partir del String correspondiente.
La mayoría de documentación son para hacerlo de la primera forma así demostrar la potencia de la librería recorriendo sus funciones, así vamos a ver cómo convertir HTML a PDF en Java de ambas formas.
Convertir HTML a PDF: forma sencilla
Simplemente, accedes a un fichero HTML existente y se convierte a PDF. Nada más.
import java.io.*;
import com.lowagie.text.DocumentException;
import org.xhtmlrenderer.pdf.ITextRenderer;
public class HTML2PDF {
public static void main(String[] args) throws IOException, DocumentException {
String ficheroHTML = "plantilla.html";
String url = new File(ficheroHTML).toURI().toURL().toString();
String ficheroPDF = "plantilla.pdf";
OutputStream os = new FileOutputStream(ficheroPDF);
ITextRenderer renderer = new ITextRenderer();
renderer.setDocument(url);
renderer.layout();
renderer.createPDF(os);
os.close();
}
}
Convertir HTML a PDF: avanzada
Si de la forma anterior necesitaras añadir el autor del documento, el tamaño del documento PDF (pagesize) u otra propiedad, a continuación tienes un ejemplo.
Recuerda consultar la documentación de la librería iText porque hay más opciones disponibles.
import java.io.FileOutputStream;
import java.io.StringReader;
import com.lowagie.text.Document;
import com.lowagie.text.PageSize;
import com.lowagie.text.html.simpleparser.HTMLWorker;
import com.lowagie.text.pdf.PdfWriter;
public class HTML2PDF {
public static void main(String ... args ) {
try {
Document document = new Document(PageSize.A4);
PdfWriter pdfWriter = PdfWriter.getInstance(document, new FileOutputStream("plantilla.pdf"));
document.open();
document.addAuthor("Persona creadora");
document.addCreator("Software generador");
document.addCreationDate();
document.addTitle("Titulo del documento");
HTMLWorker htmlWorker = new HTMLWorker(document);
String str = "Este es el contenido HTML, bien en String o reemplazalo por el contenido del fichero del ejemplo anterior";
htmlWorker.parse(new StringReader(str));
document.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}