Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    20

    [JAVA][iReport]Utilizzo e inserimento di un Jasper report

    Ciao a tutti, devo realizzare un software in Java per il mio tirocinio.
    Sono riuscito domo immense fatiche e problemi a realizzare quasi tutta la parte di codice, ora dovrei realizzare la funzione "Stampa" che ad esempio mi consente di stampare la fattura.
    Mi hanno suggerito di utilizzare iReport per generare un report, ho trovato una guida su internet che mi consente di generare il file .jasper ma ora non so come utilizzarlo/collegarlo con Netbeans.
    Qualcuno sa aiutarmi? se vi serve qualche altra informazione fatemi sapere
    Grazie!

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Ciao, ti rispondo a grandi linee perché ho avuto qualche difficoltà ad utilizzare iReports su Netbeans per cui in caso di utenti più fortunati, lascio il campo a spiegazioni specifiche e dettagliate.

    Ammesso che tu abbia compilato il tuo modello di report e che quindi tu abbia a disposizione sia il file .jrxml che il .jasper, non ti resta che creare le classi per popolare il report.

    Ti lascio traccia di quanto ho fatto io:

    codice:
    import java.util.*;
    import java.io.*;
    
    
    import net.sf.jasperreports.engine.*;
    import net.sf.jasperreports.engine.data.*;
    import net.sf.jasperreports.engine.design.JasperDesign;
    import net.sf.jasperreports.engine.xml.JRXmlLoader;
    
    
    
    
    
    
    /**
     *
     * @author Andrea
     */
    public class report {
        
        public static void main (String[] args) throws Exception {
            Constants c = new Constants(new String[]{"E:/Documents/Netbeans Projects/IText/"});
            //AccessDatabase ad = new AccessDatabase();
            File reportModel = new File(Constants.jasperreports, "test_enav.jrxml");
            InputStream is = new FileInputStream(reportModel);
            Map parameters = new HashMap();
            DataBeanMaker dbm = new DataBeanMaker();        
            //ArrayList<ReportBean> dataBeanList = dbm.getDataBeanList();
            
            JRResultSetDataSource rsDataSource = new JRResultSetDataSource(dbm.getDefaultBeanList());
            
            //JRBeanCollectionDataSource beanColDataSource = new JRBeanCollectionDataSource(dataBeanList, false);
            JasperDesign jasperDesign = JRXmlLoader.load(is);
            JasperReport jasperReport = JasperCompileManager.compileReport(jasperDesign);
            //JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, beanColDataSource);
            JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, rsDataSource);
            
            JasperExportManager.exportReportToPdfFile(jasperPrint, Constants.jasperreports+"/pdfReport.pdf");
        }
        
    }
    codice:
    import java.sql.*;
    import java.util.*;
    import database.*;
    
    
    /**
     *
     * @author Andrea
     */
    public class DataBeanMaker {
        
        public ResultSet getDefaultBeanList() throws Exception {
            AccessDatabase ad = new AccessDatabase();
            Connection conn = ad.getConnection();
            
            String query = "SELECT * FROM TEMP_NOTAMS";
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(query);
            
            return rs;
        }
        
        
        public ArrayList<ReportBean> getDataBeanList() throws Exception {
            
            ArrayList<ReportBean> list = new ArrayList<ReportBean>();
            AccessDatabase ad = new AccessDatabase();
            Connection conn = ad.getConnection();
            
            String query = "SELECT NotamLocator, NotamSeries, NotamClass, FieldA FROM TEMP_NOTAMS";
            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery(query);
            
            while (rs.next()) {
                String NotamLocator = rs.getString("NotamLocator");
                int NotamClass = rs.getInt("NotamClass");
                String NotamSeries = rs.getString("NotamSeries");
                String FieldA = rs.getString("FieldA");
                ReportBean bean = produce(NotamLocator, NotamSeries, FieldA, NotamClass);
                System.out.println(bean);
                list.add(bean);
            }
            return list;
        }
        
        private ReportBean produce(String NotamLocator, String NotamSeries, String FieldA, int NotamClass) {
            ReportBean reportBean = new ReportBean();
            reportBean.setNotamSeries(NotamSeries);
            reportBean.setNotamLocator(NotamLocator);
            reportBean.setFieldA(FieldA);
            reportBean.setNotamClass(NotamClass);
            return reportBean;
        }
    }
    codice:
    public class ReportBean {
        
        private String notamLocator;
        private String notamSeries;
        private String fieldA;
        private int notamClass;
        
            
        public void setNotamLocator (String NotamLocator) {
            this.notamLocator = NotamLocator;
        }
        
        public void setNotamSeries(String NotamSeries) {
            this.notamSeries = NotamSeries;
        }
        
        public void setFieldA (String FieldA) {
            this.fieldA = FieldA;
        }
        
        public void setNotamClass (int NotamClass) {
            this.notamClass = NotamClass;
        }
        
        public String getNotamLocator() {
            return this.notamLocator;    
        }
        
        public String getNotamSeries() {
            return this.notamSeries;
        }
        
        public String getFieldA() {
            return this.fieldA;
        }
        
        public int getNotamClass() {
            return this.notamClass;
        }
        
        public String toString() {
            StringBuffer buf = new StringBuffer();
            buf.append(getNotamLocator());
            buf.append(", ");
            buf.append(getNotamClass());
            buf.append(", ");
            buf.append(getNotamSeries());
            buf.append(", ");
            buf.append(getFieldA());
            return buf.toString();
        }
        
    }


    In altre parole, ho 3 classi:

    un bean che mi modellizza il record
    una classe che mi prepara la collezione di record (bean) da sparare nel report
    una classe che mette insieme il report stesso.

    Tralasciando le costanti specifiche del mio progetto, ho seguito più o meno la traccia fornita su internet (credo che nell'esempio che avevo trovato io partissero da un file XML, ma poco cambia, l'importante è fornire al report builder la collezione o le collezioni di record da inserire.

    Mi fermo qui perché sono ancora piuttosto ignorante in materia di subreports e altre nozioni "avanzate".

    PS: a livello visuale, ho trovato più facile da utilizzare il tool creato per Eclipse (c'è pure una versione stand-alone scaricabile dal progetto jasperreports stesso basato su una release strippata di tutto di Eclipse), poi mi sono ricopiato i file necessari in Netbeans ed ho utilizzato quello. Nè da Eclipse né su Netbeans sono stato in grado di "bindare" risorse provenienti da Database (via tool visuale), per cui nella definizione di un datasource di prova, ho utilizzato un file XML. Ripeto, solo a scopo "vedi quel che stai facendo". Poi come hai visto dal codice, sono passato al database nella versione finale.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    PPS: troverai dei refusi dovuti a tentanti precedenti.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    20
    ho provato a controllare ma non ci ho capito praticamente nulla.
    Cerchiamo di fare una intro
    Allora se ho capito bene io con iReport genero un report(*) che poi andrò ad utilizzare per generare il mio file (nel mio caso vorrei un .pdf)
    Ho trovato su internet si e no 2 guide, fatte molto male e incomplete tra l'altro, in cui mi viene detto di importare delle librerie:

    1. commons-beanutils-1.8.2.jar
    2. commons-collections-3.2.1.jar
    3. commons-digester-1.7.jar
    4. commons-logging-1.1.jar
    5. groovy-all-1.7.5.jar
    6. iText-2.1.7.jar
    7. jasperreports-4.1.2.jar

    E' corretto tutto questo?



    (*)Prima domanda: perchè mi occorrono due file? Ovvero il file .jrxml e il file .jasper.
    Se ho capito bene il primo è il file che utilizzo con iReport, ovvero quello che riesco a manipolare graficamente, con iReport appunto, mentre il secondo è quello che serve a Java per generare il report, ovvero è quello in cui sono contenute tutte le istruzioni su cosa e come prendere le informazioni dal BD(mySQL)

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Allora gli import che ho io sono leggermente diversi, ma forse utilizzo roba diversa, comunque almeno per quello ti basta seguire questa:

    http://community.jaspersoft.com/wiki...y-requirements

    e vedere quello che ti serve. Sicuramente tutto quello in Commons e quello in PDF. Ti servirà anche "qualcosa" da JRXML, nello specifico ho usato commons-digester come te.

    Perché ti occorrono due file: in verità ti sei risposto. Il file jrxml è il modello del tuo report. Contiene il design, i placeholders per le informazioni, gli stili etc etc. Questo viene poi "compilato" dal motore di JR ottenendo il file jasper, jasper che è poi effettivamente utilizzato nella compilazione del report stesso. All'atto pratico, il file jasper puoi bellamente ignorarlo (come vedi nel mio esempio non viene mai richiamato esplicitamente).

    Per quanto riguarda l'assenza di materiale di studio, purtroppo è vero. Puoi tamponare comunque con le info che trovi nei vari forum (quelli di jasper reports stessi e stackoverflow, oltre a quanto trovi direttamente qui su forum.html.it)
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.