mercoledì ago 20, 2008

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.jar
  • minium.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..



Comments:

Post a Comment:
  • HTML Syntax: Allowed