- 简述
公司由于业务需要,需要进行报表开发。表格内容并不是特别复杂,大致都是table类型加单参数(多参数)条件查询。
(a).最开始采用pentaho的report_designer和bi_server组合
report_designer用作报表设计,bi_server用作报表发布,后面发现数据基本能够展示出来,但是报表的导出和打印功能不是特别好,可能是自己研究不够深入,
(b).后面老大让转CR(水晶报表),然后找了一个基本的web项目demo,对之前需要做的报表进行整合。水晶报表的做法跟pentaho类似,也是设计器,然后跟web项目整合之后部署在tomcat中。然后再vue项目中通过window.open(url)访问
(c).接下来就是fineReport,帆软刚开始是拒绝的,因为要收钱,但是最后当使用免费试用版的时候,发现,果然是收费的,这个对比之前两个,是最好用的。条件查询,类似excel的界面报表设计,多数据源的支持,已经网上的各种参考资料,都是前两者无法比的。这样说吧,同样再sql写好的前提下,前面两个设计一个报表可能需要一到两个小时,现在这个需要五分钟左右。
(d).ireport+jasper
这个其实没怎么用过,准备用着试试看一下
(e).当时做其实还有另外一种方式,将报表画出来。这个跟报表设计软件无关,就不做说明了。
2.各种报表设计方案记录
(1).fineReport(基于8.0版本)
先从帆软说起,因为也是刚做,记忆深刻点。先上需求:有这样几个报表,有的是单参数查询,有的是多参数查询。有一个共通需求是导出为excel和pdf等。fineReport在这方面的支持很好。因为是vue前端项目需要有用到报表,vue项目页面点击报表按钮时,需要请求到报表,这个报表必须要有一个报表服务,于是有了如下流程
- 新建一个报表服务项目(就是简单的web服务),
建立好后的web项目的目录结构如下
- 导入帆软必要的jar包。
具体有哪些jar包,如下截图
- 修改web.xml文件,增加配置
- 利用报表设计器进行报表设计,这个涉及的内容太宽广,具体参考fineReport官方文档,贴出链接: http://help.finereport.com/
- vue项目中怎么访问呢?
按钮点击事件中直接利用window.open(url)访问部署在tomcat中的报表文件
http:192.168.3.242:8080/cristal/ReportServer?reportlet=WMSInStorageWorkBook.cpt&__bypagesize__=false&id="+trqiId
其中,http:192.168.3.242:8080是报表服务ip和端口,cristal是开放的应用名称,
ReportServer是固定写法,reportlet=WMSInStorageWorkBook.cpt中WMSInStorageWorkBook是利用报表设计器生成的报表文件。__bypagesize__=false如果不写,当数据列很多的时候,不会显示所有的数据列。后面的id自然就是传递的参数了。
小结:基本流程就是新建web项目,导入jar,新建存放datasource.xml和cpt文件的文件夹,然后导入一些必要的相关jar包。修改web.xml文件,最后项目访问部署好的报表服务的报表文件。
(2).水晶报表
水晶报表这边实际上做了很多工作,多参数,单参数,包括后台servlet利用doPost()读取前端请求数据,然后拼装sql等等。不过有一个瓶颈始终没有克服,就是多表联合查询展示数据的问题。当报表中包含多个表的数据,基于网上找的那个demo就歇菜了。始终无法绕过这个瓶颈。网上一直找不到。自己这边采用的一种解决方式为:根据报表需要展示的数据建一张表,每次用户查看报表的时候,先清空一次表,然后servlet通过原生sql查询将数据查询出来,然后插入到表中,然后在通过一个单表的sql查询之前插入的数据,把数据展示出来。这种方式当然是不好的。所以后来才会采用水晶报表。
(3). pentaho
pentaho是免费开源的bi软件。我觉得比水晶报表好用,但是比较笨重,另外一个,对导出和打印的支持不好(可能我不知道怎么设置,就是没有导出和打印功能,只有一个数据展示功能)。这个是由两个组件结合使用的,一个是report_designer,一个是bi_server,前者是报表设计器,主要是负责报表设计,通过拖拉拽做好报表。bi_server主要是发布做好的报表。
(4).iReport+jasper
这个没怎么用过,听说是对java支持比较好。有时间做一个demo之后再来写感受
下载地址由于csdn上传限制,上传百度网盘。链接:https://pan.baidu.com/s/1GO5GCVshR6USyQ-g0bGTVg 密码:p2j1