2011-11-23 13 views
15

Qualche giorno fa il mio capo mi ha chiesto di volere fatture in PDF da un'applicazione web esterna. Dato che tutti usano JasperReports e iReport per il design, l'ho provato. La mia app Web è basata su Java + Hibernate e Spring. All'inizio Jasper sembrava a posto e anche iReport. Ad ogni modo sono stato fermato da due cose:Alla ricerca di un'alternativa a JasperReports

  • iReport è la cosa più lenta che abbia mai visto in vita mia.
  • Più seriamente, ho alcuni bean con una gerarchia di classi ed è molto complicato gestirli in Jasper. Tutti nel mio ufficio usano Jasper con query SQL, e in questo modo è uno strumento semplice e pratico, ma ho passato tutta la giornata a provare a mappare i miei bean a report e sottoreport e a pochissime opere.

Ho visto DynamicJasper, ma, sembra che non possa progettare report con esso. Cosa ne pensi? Ci sono alternative più facili da usare?

+0

Stai cercando un'alternativa che funzionerà in combinazione con Java + Hibernate e Spring? –

+0

L'API DynamicJasper è il "wrapper" per l'API JasperReports –

+1

Per quanto riguarda le prestazioni di iReport, c'è un qualche tipo di errore nei recenti 4.1.xe 4.5 versioni. Dai un'occhiata a questo post sul forum per maggiori informazioni: http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=94781#95291. L'eliminazione/azzeramento del percorso di classe ha aumentato le prestazioni di iReport di un ordine di grandezza per me. – kaliatech

risposta

2

In alternativa a iReport puoi provare JasperWave designer per JasperReports. Per affrontare il secondo problema, perché non scrivere un codice java helper che traduca la struttura dei bean nella struttura dei report? In ogni caso non è sempre facile mappare oggetti java su una sorta di struttura piatta. Crea un'interfaccia java che nasconderà la complessità della struttura dei bean sottostanti. Non sono sicuro che il secondo problema sia la ragione per cercare una soluzione di segnalazione alternativa.

4

Se il tempo è essenziale (come di solito accade quando il tuo capo ti consegna qualcosa) ti consiglio di controllare iText (il sito principale è here).

È molto, molto semplice da apprendere (puoi averlo in esecuzione, in esecuzione e generare semplici esempi "Hello, PDF!" In 20 minuti) e puoi esportare qualsiasi cosa in PDF: tabelle, elenchi, grafici, immagini, ipertesto, ecc.

Per mia stessa ammissione, JasperReports che implementa il suo JRBeanCollectionDataSource è una soluzione più elegante, flessibile e permanente per voi. Ma se hai bisogno di una libreria quick-n-dirty per produrre solo PDF, e le scadenze incombenti si avvicinano, vorrei scaricare l'iText JAR e avere a esso.

Il sito è caricato con esempi di codice pratici per qualsiasi cosa tu voglia realizzare.

A differenza di JasperReports, iText non è un generatore di report. È solo un generatore di PDF (che, da quello che posso dire nella tua domanda, suona come come tutto ciò che serve). Così, per una particolare Bean, si sarebbe solo selezionare le proprietà che si desidera esportati verso la fattura in formato PDF, e utilizzare il Chunk, Paragraph, ecc classi per aggiungerli al documento di cui hai bisogno:

// Your POJO/Bean/VO 
Employee oEmp = new Employee(); 

Document oInvoicePdf = new Document(); 
PdfWriter.getInstance(document, new FileOutputStream("/invoices/2011/Invoice201.pdf")); 
document.open(); 
document.add(new Chunk("Employee's name is : " + oEmp.getName())); 
document.close(); 

Anche se questo non è quello che stai cercando, a tutti i costi Ti consiglio di scegliere sterzo chiaro di Apache PdfBox. A mio modesto parere, è puro male e ti spezzerà il cuore.

Spero che questo aiuti e buona fortuna!

+0

I secondo PDFBox è difficile. Le strutture di dati interne sembrano essere guidate da perdite di memoria e non sono progettate per funzionare su documenti di grandi dimensioni. Ho finito per dover chiudere e riaprire il pdf sorgente solo per cancellare tutti i dati inutili che conserva. Spero davvero che risolvano questi problemi. –

+0

C'è qualche nuovo aggiornamento su questo? – powder366