使用ireport+jasperReport報表生成

一、報表樣式設計

       1、使用ireport Design進行報表可視化設計[下載地址:http://community.jaspersoft.com/project/ireport-designer]

        2、打開ireport Design並新建一個blank A4的模板,如下所示,默認定義了頁面的不同結構

        

        3、我的目標報表需要有報告的title和一些統計的表格數據,而表格title我希望參數如,所以我在Parameters節點下添加了一個title的參數,然後將改參數拖動到右側窗口“Title”區域上,調整參數框的位置和大小。

          另外我還希望顯示一個執行時間,所以打開組件面板,將“Current Date”的組件也拖動到右側窗口的Title區域。

        4、報表內容部分我希望填充一些統計的表格數據,首先需要設置列頭,因爲這個列頭是不變的,所以我們打開組件面板,拖動幾個“static text”組件到“column header”區域,並進行排版。

          表格內容我們從java代碼中傳入,所以需要定義幾個參數,我們在“Fields”下新建幾個Field並進行重命名。將建好的field參數拖到右側窗口的“Detail 1”區域並進行排版。

          因爲有時候數據會出現因爲過長而被截斷的現象,所以我們需要再對Details下的field屬性進行設置,選擇某一個field,然後將“Stretch with overflow”勾選,將該區域內其他的所有field的“stretch type”全部修改爲“relative to band  height”。

        5、將xml compile爲jasper格式,最終整體樣式如下:


二、jasper使用報表模板文件並生成最終報表

       1、引入jasper的依賴

<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>6.0.0</version>
</dependency>

       

        2、根據jasper報表的Field設計,新建一個java類,並且設置與之名字一樣的成員,生成所有這些成員對應的set和get方法。

CrashBean.java
public class CrashBean {
    private String hash;
    private String number_o;
    private String user_o;
    private String number_l;
    private String user_l;
    private String imei;
    private String product;
    private String rom;
    private String version;
    private String call;
    private String stack;
    private String path;
     
    public CrashBean() {
        super();
    }
     
     
    public CrashBean(String hash, String number_o, String user_o,
            String number_l, String user_l, String imei, String product,
            String rom, String version, String call, String stack, String path) {
        super();
        this.hash = hash;
        this.number_o = number_o;
        this.user_o = user_o;
        this.number_l = number_l;
        this.user_l = user_l;
        this.imei = imei;
        this.product = product;
        this.rom = rom;
        this.version = version;
        this.call = call;
        this.stack = stack;
        this.path = path;
    }
 
    public String getProduct() {
        return product;
    }
 
    public void setProduct(String product) {
        this.product = product;
    }
 
    public String getRom() {
        return rom;
    }
 
    public void setRom(String rom) {
        this.rom = rom;
    }
 
    public String getVersion() {
        return version;
    }
 
    public void setVersion(String version) {
        this.version = version;
    }
 
    public String getCall() {
        return call;
    }
 
    public void setCall(String call) {
        this.call = call;
    }
 
    public String getStack() {
        return stack;
    }
 
    public void setStack(String stack) {
        this.stack = stack;
    }
 
    public String getPath() {
        return path;
    }
 
    public void setPath(String path) {
        this.path = path;
    }
 
    public String getHash() {
        return hash;
    }
    public void setHash(String hash) {
        this.hash = hash;
    }
    public String getNumber_o() {
        return number_o;
    }
    public void setNumber_o(String number_o) {
        this.number_o = number_o;
    }
    public String getUser_o() {
        return user_o;
    }
    public void setUser_o(String user_o) {
        this.user_o = user_o;
    }
    public String getNumber_l() {
        return number_l;
    }
    public void setNumber_l(String number_l) {
        this.number_l = number_l;
    }
    public String getUser_l() {
        return user_l;
    }
    public void setUser_l(String user_l) {
        this.user_l = user_l;
    }
    public String getImei() {
        return imei;
    }
    public void setImei(String imei) {
        this.imei = imei;
    }
}

 

       3、使用JasperReport提供的方法設置報表參數和數據

MyJasperReport.java
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.util.JRLoader;
public class MyJasperReport {
    private Logger m_logger = LoggerFactory.getLogger(this.getClass());
    private ArrayList<CrashBean> crashBeans = new ArrayList<CrashBean>();
    public MyJasperReport(String jasperFile, String htmlReport,ArrayList<CrashBean> beans) {
         
//      generatorBeanData();
         
        Map parameters = new HashMap();
        parameters.put("reporttitle""這是一個測試用的Title");
         
        // 定義java bean數據源
        JRDataSource dataSource = new JRBeanCollectionDataSource(beans);
        try {
            JasperReport jasperReport = (JasperReport) JRLoader
                    .loadObjectFromFile(jasperFile);
            JasperPrint print = JasperFillManager.fillReport(jasperReport,
                    parameters, dataSource);
            JasperExportManager.exportReportToHtmlFile(print, htmlReport);
        catch (Exception ex) {
            m_logger.error(ex.getMessage());
            ex.printStackTrace();
        }
    }
     
    public void generatorBeanData()
    {
    }
}

備註:報表除了html,還支持pdf、csv等多種格式

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章