189 8069 5689

java学习之JasperReport踩坑-创新互联

下面进入正题,来介绍下今天的猪脚JasperReport或者叫它ireport亦或jasperstudio,当然后面两个是它的可视化工具。

网站建设哪家好,找创新互联公司!专注于网页设计、网站建设、微信开发、小程序定制开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了塔河免费建站欢迎大家使用!

JasperReport是个什么东西?

这货其实在国内用户也不少,是个国外的产品,而且可以说在JAVA报表领域应用是相当的广泛。

我当初刚刚接触这个报表的时候还是相当的喜欢的,最主要的是它的可视化工具,真的是让我欲罢不能,竟然可以通过简单画图的方式来设计JAVA报表。说起画图就是可以通过可视化的工具,让我们可视化的设计报表模板,并且它支持输出的文件格式很广泛,包括EXCEL、WORD、PDF、HTML、XML、CSV等等。

看起来是不是很强大,一次设计,多次复用。当然强大得的东西,往往都有两面性,这不就被我遇到了,折磨了我相当长的时间,后文会详细描述的。

JasperReport的大胸弟

前面我说,JasperReport或者叫它ireport或jasperstudio,其实这是不准确的。二弟ireport、三弟jasperstudio其实是jasper的辅助视觉设计工具,你不用它也能设计jasper报表,多写点XML白。5.5之前这个工具叫ireport,5.5之后随着三弟jasperstudio的出生,ireport就被完全替代了,其实这两个工具基本上是一样的,一奶同胞。

具体的工作流程:

①首先Jasper会获取需要输出的格式信息的xml文件,然后从xml文件中编译出.jasper类型的文件,然后这个jasper文件可以在我们的应用程序中被加载生成最终的报表。有没有很熟悉的感觉,是的,这一点和java很像,都需要编译一下。

下图,就是ireport的操作界面,jasperstudio类似,就不贴了,大家可以自行百度下。

java学习之JasperReport踩坑

上图每种类型的band简单介绍一下。


(1)Title band:title段只在整个报表的第一页的最上面部分显示,除了第一页以外,不管报表中共有多少个页面也不会再出现Title band中的内容。


(2)pageHeader Band:顾名思义,pageHeader 段中的内容将会在整个报表中的每一个页面中都会出现,显示在位置在页面的上部,如果是报表的第一页,pageHeader 中的内容将显示在Title Band下面,除了第一页以外的其他所有页面中pageHeader中的内容将在显示在页面的最上端。


(3)pageFooter Band:显示在所在页面的最下端。


(4)lastPageFooter Band:显示在最后一页的最下端。


(5)Detail Band:报表内容段,在这个Band 中设计报表中需要重复出现的内容,Detail 段中的内容每页都会出现。


(6)columnHeader Band:针对Detail Band的表头段,一般情况下在这个段中画报表的表头。


(7)columnFooter Band:针对Detail Band的表尾段。


(8)Summary Band:表格的合计段,出现在整个报表的最后一页中的Detail band 的后面,一般用来统计报表中某一个或某几个字段的合计值。

上面就是可视化的工具的全部,其实怎么用很简单,上手摸索下就会了,既然是踩坑实录,这个自然不是重点,不说了。

代码中的应用

这是我总结的步骤,可能描述的不是很准确,大家凑合下

①设计模板,生成JRXML文件,↑↑上面的可视化工具设计你所需要的模板样式

②编译模板,JRXML编译成Jasper文件,就像java中的.java和.class文件一样,程序中运行的需要是*.jasper的二进制文件。

其实这一步可以直接用ireport编译生成.jasper,当然也可以在运行时通过jasper程序编译。但是建议如果在程序中编译的话,jasper版本最好和ireport或者jasperstudio的版本一致。

③执行报表(数据填充到报表)

1、 加载模板生成Jasperreport对象

2、利用JasperFillManager,生成JasperPrint对象

④最后利用JRXlsxExporter导出类,将报表导出或者展示

加载模板

既然我们已经利用可视化工具生成了.jasper或者.jrxml文件了,自然是需要让程序加载它。

加载的代码,返回jasperport对象

    if (urlPath.endsWith(".jrxml")) {
      //compile jrxml to jasper
      try {
        InputStream is = url.openStream();
        jasperReport = JasperCompileManager.compileReport(is);
      } catch (IOException e) {
        throw new BaseException("Load jasper error", e);
      } catch (JRException e) {
        throw new BaseException("The jrxml template transform to jasper file error", e);
      } catch (Throwable e) {
        log.error(e);
        throw new BaseException(e.getMessage());
      }
    } else if (urlPath.endsWith(".jasper")) {
      try {
        InputStream is = url.openStream();
        jasperReport = (JasperReport) JRLoader.loadObject(is);
      } catch (IOException e) {
        throw new BaseException("Load jasper error", e);
      } catch (JRException e) {
        throw new BaseException("The jrxml template file error", e);
      } catch (Throwable e) {
        log.error(e);
        throw new BaseException(e.getMessage());
      }
    } else {
      throw new BaseException("Invalid file!");
    }

分享文章:java学习之JasperReport踩坑-创新互联
地址分享:http://cdxtjz.com/article/diodoh.html

其他资讯