之所以学习jasperReport,因为它在java世界里是最流行的报表工具。(jasperReport的初级教程,可以参考这个,不再赘余啦)
定制报表格式。
有二种方式,一种就是写jrxml文件,其实就是xml文件。另一种方式更直接,就是生成一个JasperDesign类的实例,在japsperDesign类中自己定义模板。
jrxml文件也是通过JRXmlLoad加载,转成JasperDesign类的实例。也就是说jrxml文件还需要进行解析,加载。
开发中常通过iReport工具编辑jrxml文件生成模板,再用代码加载解析成类。
填充数据。
jasperReports支持了很多的格式,比如对Hibernate、MongoDb、EJB的支持。
对于我们经常使用的,一般是二种方式,一种方式是通过JDBC连接提供数据源,一种就是通过Collection提供数据源。当然还有web Service的xml文件提供的。
我的建议是,如果你的程序中的统计直接使用Jdbc就可以完成,那么就使用jdbc数据源的方法,反之,使用javaBean的集合是不错的选择,因为这样不会在意你的数据的来源,你也可以任意处理,比如说,要通过权限检查的数据才在报表中生成的话,就可以过滤出不符合权限的数据。
这里只提供部分代码,想要基于SSH2的jasperReports演示完整代码,请到我的资源中下载,免积分。
在Action中将Collection填充到jasperReports模板文件类中
public class PersonAction extends ActionSupport { @Override public String exportToHTML() throws Exception { // 查询得到的person实体列表 persons = personDao.findPersion(); // 转换成JRBeanCollection JRBeanCollectionDataSource dataSource = new JRBeanCollectionDataSource(persons); // 编译模板文件变成类 JasperReport jasperReport = (JasperReport)JasperCompileManager.compileReport(PersonAction.class.getResource("/").toString().substring(6) +"person.jrxml"); // 将Collection填充到模板文件类中 Map parameters = new HashMap(); JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, parameters,dataSource); // 以html形式显示 str = ExportReport.exportToHTML(jasperPrint); return SUCCESS; }
ExportReport类,将被填充后的模板文件类,以多种形式显示
这里展示的只是生成html格式的报表,其他格式比如pdf,xml,Excel,他们都大同小异,可以在源码示例中看到。
public class ExportReport { /** * 导出html * @param jasperPrint * @return */ public static String exportToHTML(JasperPrint jasperPrint){ StringBuffer sb = new StringBuffer(); try { JRHtmlExporter exporter = new JRHtmlExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STRING_BUFFER, sb); exporter.setParameter(JRHtmlExporterParameter.IMAGES_URI, "../servlets/image?image="); //报表边框图片设置IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE,不使用图片 exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN,Boolean.FALSE); exporter.setParameter(JRExporterParameter.CHARACTER_ENCODING, "UTF-8"); /* exporter.setParameter(JRHtmlExporterParameter.HTML_HEADER, ""); exporter.setParameter(JRHtmlExporterParameter.BETWEEN_PAGES_HTML, ""); exporter.setParameter(JRHtmlExporterParameter.HTML_FOOTER, "");*/ exporter.exportReport(); } catch (JRException e) { // TODO Auto-generated catch block e.printStackTrace(); } return sb.toString(); }
运行效果
在实际应用中,根据具体业务,利用可视化编辑工具iReport进行布局即可。
注意事项
- iReport和JasperReport版本一致才行,iReport可通过兼容性设置版本
- ireport导出PDF,中文字体不显示
iReport默认情况下是不支持中文的,虽能在预览视图里良好的显示正常、粗体、斜体、下划线等,但部署到应用后部分功能无效果,只能以正常字体显示。
如需完整使用以上的功能,需要装中文字体包导入到iReprot软件里去。
在Web应用程序中,同样需将导出的字体jar包放入classpath文件夹下。
参考ireport导出PDF 引入外部中文字体
小结
报表是几乎所有系统必不可少的模块,或者说是基本业务需求。报表可以帮助我们访问、格式化数据,并把数据信息呈现给使用者。
一提到展示给客户,就想到“受累不讨好”,你的系统无论是用的什么技术实现,无论是多大工作量,只要呈现给用户很烂,结果就是受累不讨好。所以,凡是给用户看到的,我们更该得到重视,虽然这话听着有点。。。,不过确实如此。