iReport 相关资料汇总

JapertReports&iReport的开源报表实战

JasperReports+iReports ,  类似于CrystalReport的开源报表系统,最主要能帮助我们在设计时把数据和表示分开,帮助我们实现Web报表的分页打印,分组合计,变量的加减处理,输出的格式化,还有导出Excelpdf等,反正用过了的人都不肯回去重新自己画html页面出报表了。
    google
上有入门教程,非常容易。但一遇到复杂的报表,入门那套很快就玩不转了,如果没有中级的研究,可能又得乖乖回去用html画报表。
   
首先网上有一份JasperReport收费文档, 不过老实说,这份文档收费的话显得太单薄了。

 

1.自定义数据源

    1.1 为什么要自定义数据源
   
简单的报表,当然用不着自定义数据源。但查询复杂起来时,还死守着一条SQL写完会让SQL变得又长又难读,从来都最讨厌别人在SQL上炫技。 这时候,把查询分开执行,每个查询只负责向VO(值对象Bean)赋值若干个列,程序就会清晰很多。而且,相近的查询还可以进一步封装在一个Reporter类里,提供给报表内或者报表之间重用。更何况,有些情况根本不可能一条SQL里写完,而放在Java程序里处理却轻松自在。 
   
搞定了可分解重用的数据源后,我才真正敢把JasperReports用在我们的系统上,否则,无法想象怎么维护那么多的SQL.

 

    1.2 自定义数据源的机制
dori.jasper.engine.JRDataSource 接口非常简单,只要实现两个方法:

public boolean next() throws JRException;
public Object getFieldValue(JRField jrField) throws JRException;


       
看函数名字都知道其意义了。所幸,我们连这两个方法都不用实现,Jaspert已经有两个关于VO Bean的实现了。它们是dori.jasper.engine.data.JRBeanArrayDataSourcedori.jasper.engine.data.JRBeanCollectionDataSource
       
看名字可知,一个用Array来放bean,一个用Collection
 
      
很可惜如果VO有内嵌对象,也不能用$F{order.customer.name}这样的语法读取。
      
另外HibernateHQL查询,如果返回多个对象时,每一rowObject[],只能按index而不能按名取值,也就不支持getFileldValue(field)了,hibernate.org上有折衷的方法,但都不好。

     1.3 Sample代码与解释
//封装了大量查询的reporter
MooncakeReporter mooncakeReporter = new MooncakeReporter();
//
建立VOMap,因为需要多次执行查询,需要快速找回VO来赋值,因此采用Map.
Map map = new HashMap();
rs = mooncakeReporter.findAllVaildProduct();
while (rs.next())
{
  MooncakeVO mooncakeVO = new MooncakeVO();
  String goods_no = rs.getString("goods_no");
  String goods_name = rs.getString("name"); 
       mooncakeVO.setName(goods_name);
       mooncakeVO.setCode(code);

 

       map.put(goods_no, mooncakeVO);
}

//
调用Reporter封装好的查询函数获取数据,并通过主键goods_no获得VO来赋值。
rs = mooncakeReporter.findSaleOrderByShopType("shop");
while (rs.next())
{
   String goods_no = rs.getString("goods_no");
   MooncakeVO mooncakeVO = (MooncakeVO) map.get(goods_no);
   if (mooncakeVO != null)
   {
      mooncakeVO.setShopCount(new Integer(rs.getInt("count")));
   }
}

//
如此重复执行查询若干步
.....

//
因为JRBeanCollectionDataSource需要Collection或者Array,把Map转化为List
List result = new ArrayList(map.values());

//
result进行排序,通过BeanUtilsbeanComparator来实现,在下一小节会讲到。
Collections.sort(result, new BeanComparator("code"));

//
最后把result赋给JRBeanCollectionDataSource
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRBeanCollectionDataSource(result));

 

 

 

    1.4 扩展
    1.
BeanComparator进行排序
     
map来存放的VO是没有顺序的,必须对其进行排序。 jakata commons-beanutilsBeanComparator类,可以动态改变排序的列,比自己实现Compare()接口好。

  Collections.sort(result, new BeanComparator("code"));

     对于"Order by lastName, firstName"的情形,还可以写成这样,其中ComparatorChain属于jakata commons-collections包。

     ArrayList sortFields = new ArrayList();
     sortFields.add(new BeanComparator("lastName"));
     sortFields.add(new BeanComparator("firstName"));
     ComparatorChain multiSort = new ComparatorChain(sortFields);
     Collections.sort(rows,multiSort);

 

3.iReport报表的快速设计

 

2.<box>元素,终于不用手工划表格线了

 

   iReports终于出了0.41,支持 JasperReports 0.64.

 

     JasperReports 0.64为什么这么重要?因为从0.63开始,JasperReports支持了千呼万唤始出来的box属性,可以像其他商业报表工具那样,设置表格的四周是否有线.而在以前,虽然人人都说神仙好,但一想起要手工划线, 还要精确的在两个field之间在留1个像素,就头皮一阵阵发麻.

 

     另外,新的boxexcel下也表现良好,不再需要为HtmlExcel制作两个不同的模版文件.

 


  一开始什么都不懂,对着满屏的元素,拖拉半天才把它对齐,差点就用不下去了。 
       2.1
快速整理,对齐报表内的元素
      这里示范最快捷的方法:
      1.
点击随便一个要对齐的元素,左边的文档结构列表里相应的report session会打开
      2.
shift键选择该session里的所有元素
      3.ctrl+shift+l, ctrl+shift+
向上箭头

     
原来杂乱无章的元素一下子排齐了。
     
在报表里增加或删除元素后,用此法都可快速重新对齐页面。

其中第1,2步是快速批量选择所有元素,你也可以用鼠标拉框框选,或者按shift键一个一个选。
     
第3步分别是左对齐和上对齐,都会向第一个选择的元素看齐。

 

       2.2 批量修改元素属性
       和很多网页编辑器一样,可以同时选择多个元素然后点选属性批量修改。

 

 

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
iReport是一个用于创建JasperReports报表的可视化设计器。它可以帮助用户通过拖放方式设计报表,支持多种数据源,包括数据库、XML、JavaBeans等。以下是iReport的一些基本使用方法: 1.安装iReport iReport可以从官方网站下载并安装。安装完成后,可以打开iReport并开始创建报表。 2.创建报表iReport中,可以通过向报表中添加元素来创建报表。可以从工具栏中选择所需的元素,例如文本框、图像、表格等,并将其拖放到报表中。可以使用属性编辑器设置元素的属性,例如字体、颜色、大小等。 3.设置数据源 在iReport中,可以使用多种数据源来填充报表。可以使用JDBC连接到数据库,也可以使用JavaBean、XML等数据源。可以在iReport中设置数据源,并使用查询语句从数据源中检索数据。 4.导出报表iReport中,可以将报表导出为多种格式,例如PDF、HTML、Excel等。可以使用导出向导来选择所需的导出格式,并设置导出选项。 以下是两个与iReport相关的例子: 1.使用JRBeanCollectionDataSource填充报表 ```java JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(devPictures); Map<String, Object> parameters = new HashMap<String, Object>(); parameters.put("dataSource", dataSource); JasperPrint jasperPrint = JasperFillManager.fillReport(report, parameters, dataSource); ``` 2.使用JRRtfExporter导出报表 ```java JRRtfExporter exporter = new JRRtfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outputFile); exporter.exportReport(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值