Creare PDF da HTML... Le salsicce volanti (The Flyng Saucer Project)..
La generazione di documenti PDF da applicazioni java/web si sta facendo sempre più importante e determinante.
Esistono vari metodi per produrre documenti pdf di qualità, tutto dipende dalla voglia di sbattersi con il codice e dalla voglia di sbattersi con elementi grafici...
Il progetto The Lyng Saucer, oltre ad avere un nome accattivante mette a disposizione interessanti strumenti per la produzione di documenti pdf...
L'opzione più interessante è senza dubbio quella di digerire e renderezzare stringhe HTML formattate mediante CSS e riprodurle dal punto di vista grafico in un documento PDF.
Il nostro punto di partenza è The Flyng Saucer Project Home Page (FSP), dove troviamo i file jar (100% pure java) e ottima documentazione html e pdf per lavorare con queste potenti librerie.
Inoltre xhtmlrenderer lavora con itext, altra liberia java per la generazione do documenti PDF.
In pratica ci basterà includere nel nostro progetto i seguenti jar forniti da FSP:
To summarize, the easiest CLASSPATH to set is:
core-renderer.jar(required)itext-paulo-155.jarminium.jar
A questi è necessario aggiungere cssparser-0-9-4-fs.jar ed eventualmente browser.jar .
Ora siamo pronti per produrre il nostro pdf.
Questi sono gli import da inserire nella nostra classe che produrrà il pdf:
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.xhtmlrenderer.pdf.ITextRenderer;
import org.xml.sax.InputSource;
import org.w3c.dom.Document;
import java.io.OutputStream;
import java.io.StringReader;
Questo è il codice (abbastanza semplice per generare il pdf a partire da una stringa contenente HTML
// Istanzio il document builder
DocumentBuilder documentBuilder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
// Creo la stringa HTML
String html="<html><body><h1>HELLO WORLD</h1></body></html>";
StringReader contentReader = new StringReader(html) ;
InputSource source = new InputSource(contentReader) ;
// Converto la stringa html in un inputsource mediante lo string reader e lo converto in xhtml
Document xhtmlContent = documentBuilder.parse(source);
// Renderizzo l'xhtml e lo trasformo in pdf
ITextRenderer renderer = new ITextRenderer() ;
renderer.setDocument(xhtmlContent,"" ) ;
renderer.layout();
// Forzo il mime type
response.setContentType("application/pdf" ) ;
OutputStream browserStream = response.getOutputStream();
// Produco il pdf direttamente nell'output del browser
renderer.createPDF(browserStream) ;
Nell'ultima fase avremmo potuto sostituire l'outputStream del browser/response con uno su file per produrre fisicamente il pdf e non "on The Fly".
Per il momento è tutto..
Posted at 12:56PM ago 20, 2008 by Gianpaolo in Fotografia | Comments[0]