15/01/10 13:49
netarrow
potresti usare la libreria Jasper Report, definendo il layout come fosse il modulo voluto e tirando fuori i dati da un database.
il layout si disegna in xml ma dovrebbero esistere pure dei software di design visuale.
il layout si disegna in xml ma dovrebbero esistere pure dei software di design visuale.
aaa
19/01/10 16:42
symonx80
grazie ora gli do un'occhiata.
Ma che tu sappia questa libreria mi permette di andare ad aprire il mio template, inserirne testo a mio piacimento(o sostituire del testo) e generarne il pdf finale?
Ma che tu sappia questa libreria mi permette di andare ad aprire il mio template, inserirne testo a mio piacimento(o sostituire del testo) e generarne il pdf finale?
aaa
19/01/10 16:45
netarrow
questa libreria serve a generare report dinamicamente, tu descrivi il template in xml, poi gli travasi dentro i dati, e automaticamente poi si può generare il report in pdf, html o altri formati.
io l'ho usata per generare una semplice tabella in passato, ma volendo uno potrebbe creare un template più articolato che può rappresentare un modulo.
io l'ho usata per generare una semplice tabella in passato, ma volendo uno potrebbe creare un template più articolato che può rappresentare un modulo.
aaa
19/01/10 18:21
symonx80
Ho provato la libreria.
Ho scaricato anche iReport che mi permette di creare il report direttamente disegnandolo.
Ho quindi creato un semplice file da ireport con due campi NOME e COGNOME e la query apposita.
Poi ho provato a generare il codice per connettermi al db e elaborare il report creato, ho seguito un tutorial su html.it,ma in fase di runtime mi solleva un-eccezione dicendomi di non riuscire a trovare i campi del db.
Il problema e' che sul report ho inserito la query ma non i parametri di connessione, che ho definito a codice nella mia applicazione.
L'eccezione mi viene sollevata prima che si arrivi al codice di connessione al db,ovvero
alla riga
JasperCompileManager.compileReportToFile(jasperDesign, folder + filename + ".jasper"
A console mi da
errore nel riempimento dei campi : Report design not valid :
1. Field not found : NOME
2. Field not found : COGNOME
Ma e' ovvio, ancora non ha eseguito la connessione al db che avrebbe fatto piu' avanti..
Hai idee?
non so piu' dove sbattere la testa..
Ho scaricato anche iReport che mi permette di creare il report direttamente disegnandolo.
Ho quindi creato un semplice file da ireport con due campi NOME e COGNOME e la query apposita.
Poi ho provato a generare il codice per connettermi al db e elaborare il report creato, ho seguito un tutorial su html.it,ma in fase di runtime mi solleva un-eccezione dicendomi di non riuscire a trovare i campi del db.
Il problema e' che sul report ho inserito la query ma non i parametri di connessione, che ho definito a codice nella mia applicazione.
//in una classe ho questo metodo, che richiama il metodo di un-ulteriore classe, //che gestisce le connessioni, che puoi vedere di seguito public static void creaPdfJasper() { String folder = "C:/TEMP/"; String filename = "testReport"; System.out.println("caricamento file JRXML"); // caricamento file JRXML try{ JasperDesign jasperDesign = JRXmlLoader.load(folder + filename + ".jrxml"); //compilazione del file e generazione del file JASPER JasperCompileManager.compileReportToFile(jasperDesign, folder + filename + ".jasper"); //inizializzazione connessione al database SQLTools sqlTool = new SQLTools(); sqlTool.creaJasper(folder,filename); }catch(SQLException e){ System.out.println("errore nel caricamento dei dati : " + e.getMessage()); } catch (JRException e) { System.out.println("errore nel riempimento dei campi : " + e.getMessage()); } } //classe SQL Tools public void creaJasper(String folder,String filename) throws SQLException{ Connection c = null; System.out.println("creaJasper method richiamato"); try{ if(!DriverLoad()){ System.out.println("errore nel caricamento del driver " ); }else{ c = connect(); // rendering e generazione del file PDF JasperPrint jp = JasperFillManager.fillReport(folder + filename + ".jasper", null, c); JasperExportManager.exportReportToPdfFile(jp, folder + "PROVA_JASPER.pdf"); } }catch(SQLException e){ System.out.println("errore nel caricamento dei dati : " + e.getMessage()); } catch (JRException e) { System.out.println("errore nel riempimento dei campi : " + e.getMessage()); } finally{ c.close(); } }
L'eccezione mi viene sollevata prima che si arrivi al codice di connessione al db,ovvero
alla riga
JasperCompileManager.compileReportToFile(jasperDesign, folder + filename + ".jasper"
A console mi da
errore nel riempimento dei campi : Report design not valid :
1. Field not found : NOME
2. Field not found : COGNOME
Ma e' ovvio, ancora non ha eseguito la connessione al db che avrebbe fatto piu' avanti..
Hai idee?
non so piu' dove sbattere la testa..
Ultima modifica effettuata da symonx80 19/01/10 18:22
aaa
19/01/10 19:44
netarrow
io avevo questi codici:
Poi nel file jrxml avevo fra le altre cose:
E nei punti dove volevo inserire questi fiels usavo:
Buona parte del codice jrxml veniva generato da iReport, e anche il file .jasper se non sbaglio lo compilava lui.
static void genera(String tipoReport, String query, Connection conn, int formato, File outputdir) throws JRException { Map<String, String> sqlquery = new HashMap<String, String>(); sqlquery.put("MySQLQuery", query); JasperPrint jp = JasperFillManager.fillReport(tipoReport + ".jasper", sqlquery, conn); if(formato == PDF_REPORT) JasperExportManager.exportReportToPdfFile(jp, outputdir.getAbsolutePath()); else if(formato == HTML_REPORT) JasperExportManager.exportReportToHtmlFile(jp, outputdir.getAbsolutePath()); else throw new JRException("Si è indicato un formato non supportato."); }
Poi nel file jrxml avevo fra le altre cose:
<parameter name="MySQLQuery" isForPrompting="true" class="java.lang.String"/> <queryString><![CDATA[$P!{MySQLQuery}]]></queryString> <field name="Cognome" class="java.lang.String"/> <field name="Nome" class="java.lang.String"/> <field name="email" class="java.lang.String"/> <field name="telefono" class="java.lang.Integer"/> <field name="website" class="java.lang.String"/> <field name="nickname" class="java.lang.String"/>
E nei punti dove volevo inserire questi fiels usavo:
<text><![CDATA[Cognome]]></text>
Buona parte del codice jrxml veniva generato da iReport, e anche il file .jasper se non sbaglio lo compilava lui.
Ultima modifica effettuata da netarrow 19/01/10 19:47
aaa
20/01/10 8:45
symonx80
La questione e' che io utilizzo SQL Server 2005 come database, non contemplato a quanto pare da iReport. Quindi nel disegnare il mio report io inserisco solamente la query ma non setto i parametri di connessione. Cosa che faccio poi sulla mia applicazione.
I parametri sono corretti in quanto per altre query che non utilizzano il report tutto funziona come deve.
Che tu sappia iReport ha necessit' di avere una query e una corretta configurazione di connessione per poter compilare i file .jasper?
Grazie per l'aiuto che mi stai dando!
I parametri sono corretti in quanto per altre query che non utilizzano il report tutto funziona come deve.
Che tu sappia iReport ha necessit' di avere una query e una corretta configurazione di connessione per poter compilare i file .jasper?
Grazie per l'aiuto che mi stai dando!
aaa
20/01/10 9:20
symonx80
Postato originariamente da symonx80:
La questione e' che io utilizzo SQL Server 2005 come database, non contemplato a quanto pare da iReport. Quindi nel disegnare il mio report io inserisco solamente la query ma non setto i parametri di connessione. Cosa che faccio poi sulla mia applicazione.
I parametri sono corretti in quanto per altre query che non utilizzano il report tutto funziona come deve.
Che tu sappia iReport ha necessit' di avere una query e una corretta configurazione di connessione per poter compilare i file .jasper?
Grazie per l'aiuto che mi stai dando!
La questione e' che io utilizzo SQL Server 2005 come database, non contemplato a quanto pare da iReport. Quindi nel disegnare il mio report io inserisco solamente la query ma non setto i parametri di connessione. Cosa che faccio poi sulla mia applicazione.
I parametri sono corretti in quanto per altre query che non utilizzano il report tutto funziona come deve.
Che tu sappia iReport ha necessit' di avere una query e una corretta configurazione di connessione per poter compilare i file .jasper?
Grazie per l'aiuto che mi stai dando!
Ho provato e son riuscito a fare qualche passo avanti.
Ora il problema mi viene dato alla riga
JasperExportManager.exportReportToPdfFile(jp, outputdir.getAbsolutePath());
che io ho sostituito con
JasperExportManager.exportReportToPdfFile(jp, ""/TEMP/…;
20-gen-2010 11.14.11 org.apache.catalina.core.StandardWrapperValve invoke GRAVE: Servlet.service() for servlet Controller threw exception java.lang.ClassNotFoundException: com.lowagie.text.DocumentException at java.net.URLClassLoader.run(URLClassLoader.java:200) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:188) at java.lang.ClassLoader.loadClass(ClassLoader.java:303) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316) at net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:117) at org.me.betaLib.SQLTools.generaJasper(SQLTools.java:163) at org.me.betaLib.Controller.doGet(Controller.java:74) at javax.servlet.http.HttpServlet.service(HttpServlet.java:690) at javax.servlet.http.HttpServlet.service(HttpServlet.java:803) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Thread.java:619)
l'errore e' il seguente, e sembra un po' piu' critico del precedente..
edit by netarrow: corretta la sformattazione
Ultima modifica effettuata da netarrow 20/01/10 9:27
aaa