使用ireport+jasperReport报表生成

一、报表样式设计

       1、使用ireport Design进行报表可视化设计[下载地址:http://community.jaspersoft.com/project/ireport-designer]

        2、打开ireport Design并新建一个blank A4的模板,如下所示,默认定义了页面的不同结构

        使用ireport+jasperReport报表生成_第1张图片

        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格式,最终整体样式如下:

使用ireport+jasperReport报表生成_第2张图片

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

你可能感兴趣的:(使用ireport+jasperReport报表生成)