之所以学习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默认情况下是不支持中文的,虽能在预览视图里良好的显示正常、粗体、斜体、下划线等,但部署到应用后部分功能无效果,只能以正常字体显示。
如需完整使用以上的功能,需要装中文字体包导入到iReprot软件里去。
在Web应用程序中,同样需将导出的字体jar包放入classpath文件夹下。
参考ireport导出PDF 引入外部中文字体
报表是几乎所有系统必不可少的模块,或者说是基本业务需求。报表可以帮助我们访问、格式化数据,并把数据信息呈现给使用者。
一提到展示给客户,就想到“受累不讨好”,你的系统无论是用的什么技术实现,无论是多大工作量,只要呈现给用户很烂,结果就是受累不讨好。所以,凡是给用户看到的,我们更该得到重视,虽然这话听着有点。。。,不过确实如此。