liferay 添加报表功能

综述:最近项目中要添加报表功能,我们的项目是基于liferay开源框架开发的,在这个功能完成之际我将曾经在开发过程中遇到的种种问题和其解决方案分享出来,希望对有这方面需求的朋友有所帮助!

1.我用的报表工具是ireport+jasperreport。版本是4.02,你也可以在官网上去下最新版本但下的时候一定要注意ireport和jasper版本的一致。
2.下载完成后将jasper下的jar包放到工程的lib库中:commons-beanutils-1.8.0.jar,commons-collections-2.1.1.jar,commons-digester-1.7.jar,iText-2.1.7.jar,jasperreports-4.0.2.jar,jdt-compiler-3.1.1.jar,png-encoder-1.5.jar,poi-3.6.jar,serializer.jar,struts2-jasperreports-plugin-2.2.1.jar,xalan-2.7.1.jar,commons-logging-1.0.4.jar,groovy-all-1.7.5.jar,log4j-1.2.16.jar 如果你的项目没有用到struts2框架,你就不需要加struts2-jasperreports-plugin-2.2.1.jar这个jar包,否则上面所罗列的jar包一个都不要少,不然有时会很悲剧的,我在这个地方栽倒过,就是确了jar包,导致填充报表的时候老是出错。
3.用ireport生成jasper文件。至于如何生成报表文件,因为步骤比较长我会写在另外一篇博客中。
4.在程序中加载报表文件并以javabean作为数据源填充报表。我将关键的代码帖子这里,仅供参考:
     // 这是jasper文件的本机地址
     String reportFilePath = "F:/iReport/report1.jasper";
     File reportFile = new File(reportFilePath);
     // 用于保存最终将要填充数据的bean
     ArrayList<JiaTing> data = new ArrayList<JiaTing>();
     if(reportFile.exists()){
       //searchResult 是一个list结果集 List<Order> 的对象
       for(int i = 0;i < searchResult.size();i++){
          JiaTing jiaTing = new JiaTing();
  Order order = searchResult.get(i);
          jiaTing.setxxx(order.getxxx());
          .....
          .....
          data.add(jiaTing);
       }

       JRDataSource dataSource = new JRBeanCollectionDataSource(data);
       JRXlsExporter exporter = new JRXlsExporter();
JasperReport report = (JasperReport)JRLoader.loadObject(reportFilePath);
JasperPrint jasperPrint = JasperFillManager.fillReport(report, null, dataSource);

exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, response.getOutputStream());
exporter.exportReport();
     }

5.然后就可以生成报表了。我的环境是Liferay下的,所以我以如下的方式将报表文件以流的形式输出到页面:
ResourceResponse portletResponse = (ResourceResponse)PortletActionContext.getResponse();
HttpServletResponse response = PortalUtil.getHttpServletResponse(portletResponse);
response.setCharacterEncoding("UTF-8");
response.setContentType("application/vnd.ms-excel");
如果你的环境是普通的web项目,只需生成response对象然后调用相应的方法就可以了!
6.基本的过程就是如上所诉,如果你有什么问题需要资讯,欢迎留言或qq联系。我的qq:598683742.

你可能感兴趣的:(log4j,qq,Excel,资讯,groovy)