Valid XHTML 1.0 Strict Valid XHTML 1.0 Strict

Rails e la generazione di PDF

Scritto da Massimo, il 13/06/2007 alle ore 18:11
Con Ruby on Rails si possono generare pdf in diversi modi, eccone una lista:
  • HTMLDOC
  • PdfWriter
  • PDF::Writer (Austin Ziegler)
  • Ruby FPDF
  • JasperReports
  • PDF Form Fill
  • PDFlib and PDFlib-Lite
  • Rfpdf
  • Ruby/GnomePrint + Ruby/Pango (Unicode)
Inizialmente la mia scelta è ricaduta su PDF::Writer (Austin Ziegler), data la facilità di installazione – configurazione di tale soluzione. Esiste un plugin http://railspdfplugin.rubyforge.org/wiki/wiki.pl che velocizza notevolmente la fase di installazione e configurazione. Infatti è sufficiente installare le librerie pdf-writer con gem
sudo gem install pdf-writer
successivamente si installa il plugin in questione
ruby script/plugin install svn://rubyforge.org//var/svn/railspdfplugin/railspdf/
Infine basta creare l’azione a cui si vuole associare la generazione del pdf, contenente le variabili con i dati che poi vogliamo pubblicare nella view
... dal controller ...
def getpdf
        @rails_pdf_name = "Hello.pdf" 
        @content = "This is dynamic content!!!" 
end 
nella directory “view” del controller in questione è necessario creare il file getpdf.rpdf con, per esempio, il seguente contenuto:
 pdf.select_font "Times-Roman" 
 pdf.text @content, :font_size => 72, :justification => :center

Questa soluzione è molto efficace se si vogliono creare pdf semplici in poco tempo, senza grandi esigenze di impaginazione o presentazione dei contenuti. Una guida completa con tutte le funzionalità di pdf-writer si trova qui

Un sistema dalle potenzialità decisamente più ricche e sofisticate è JasperReports. L’integrazione con il framework rails è, tutto sommato, veloce e di facile comprensione. Una guida dettagliata è reperibile qui

Il funzionamento può essere schematizzato come segue:
  1. Si genera un xml contenente i dati che ci interessa trattare nel report
  2. Viene passato l’xml ad un template JasperReports che, attraverso un’interfaccia java invocata da script, genera il report (nel formato prescelto)
  3. Viene visualizzato il report (o viene richiesto il suo salvataggio sul pc)

Esiste anche la possibilità di passare i dati in formato xml ad un server che poi si occuperà di generare il pdf. Questo velocizza di molto la procedura poiché non è più necessario richiamare la jvm per ogni generazione. Per maggiori informazioni su JasperServer.

Personalmente ho riscontrato tempi accettabili anche per la soluzione che utilizza la jvm, infatti, nei test fatti, il sistema impiega circa 3 secondi per produrre il pdf.

Gli aspetti che ho trovato più interessanti di questa soluzione, rispetto alla scelta iniziale di PDF::Writer, sono:
  • Totale separazione tra gestione dei templates e esportazione dei dati che permette un maggior disaccoppiamento tra presentazione grafica e dati
  • Grandi potenzialità dello strumento che permette reports con sottoreports, crosstabs e grafici (tramite jfreecharts) ed una gestione del layout di pagina chiara e semplice
  • Possibilità di integrazione con strumenti di business intelligence quali JasperAnalysis e JasperETL
  • Esistenza di tool grafici per la generazione di templates (iReport, JasperAssistant per Eclipse ...)
Fonti:

Inserisci commento

Autore
Email
Sito Internet
Commento



E2453ba52040458cc5df65639694b37c63b117a2

type the text from the image

Categorie: