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类似,就不贴了,大家可以自行百度下。
上图每种类型的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://azwzsj.com/article/diodoh.html