当前位置: 代码迷 >> Web前端 >> 表格学习(一):使用JasperReport+iReport进行WEB开发
  详细解决方案

表格学习(一):使用JasperReport+iReport进行WEB开发

热度:202   发布时间:2013-10-08 17:08:58.0
报表学习(一):使用JasperReport+iReport进行WEB开发

    之所以学习jasperReport,因为它在java世界里是最流行的报表工具。(jasperReport的初级教程,可以参考这个,不再赘余啦


    定制报表格式。

    有二种方式,一种就是写jrxml文件,其实就是xml文件。另一种方式更直接,就是生成一个JasperDesign类的实例,在japsperDesign类中自己定义模板。

    jrxml文件也是通过JRXmlLoad加载,转成JasperDesign类的实例。也就是说jrxml文件还需要进行解析,加载。

    开发中常通过iReport工具编辑jrxml文件生成模板,再用代码加载解析成类。

     

    填充数据。

    jasperReports支持了很多的格式,比如对HibernateMongoDbEJB的支持。

    对于我们经常使用的,一般是二种方式,一种方式是通过JDBC连接提供数据源,一种就是通过Collection提供数据源。当然还有web Servicexml文件提供的。

    我的建议是,如果你的程序中的统计直接使用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格式的报表,其他格式比如pdfxmlExcel,他们都大同小异,可以在源码示例中看到。

     

    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进行布局即可。

     

    注意事项

    1. iReportJasperReport版本一致才行,iReport可通过兼容性设置版本

     

    1. ireport导出PDF,中文字体不显示

    iReport默认情况下是不支持中文的,虽能在预览视图里良好的显示正常、粗体、斜体、下划线等,但部署到应用后部分功能无效果,只能以正常字体显示。

    如需完整使用以上的功能,需要装中文字体包导入到iReprot软件里去。

    Web应用程序中,同样需将导出的字体jar包放入classpath文件夹下。

    参考ireport导出PDF 引入外部中文字体

     

    小结

    报表是几乎所有系统必不可少的模块,或者说是基本业务需求。报表可以帮助我们访问、格式化数据,并把数据信息呈现给使用者。

    一提到展示给客户,就想到“受累不讨好”,你的系统无论是用的什么技术实现,无论是多大工作量,只要呈现给用户很烂,结果就是受累不讨好。所以,凡是给用户看到的,我们更该得到重视,虽然这话听着有点。。。,不过确实如此。