使用ireport+jasperReport报表生成

来源:互联网 发布:亿百润 知乎 编辑:程序博客网 时间:2024/05/16 05:55

一、报表样式设计

       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等多种格式

0 0
原创粉丝点击