日常工作中可能经常会涉及到用java开发报表,需求比较多的就是表格类的报表导出,单元格合并,图表的展现。具体怎么实现,分表格和图表两类来说。

1、表格类

通常采用的方式是“Java+POI+Excel模板”来制作简单的报表,生成Excel。

其实Java中实现Excel根据模板导出数据的方法有很多,一般简单的可以通过操作pol进行。还可以使用一些工具很轻松的实现模板导出,这些工具现在还在维护,而且做得比较好的国内的有easypoi,国外的就是jxls了。

如果是要用java开发报表模块和功能,其实可以着重利用jxls框架。

我用jxls也有半年时间了,半年前因项目原因需要导出大量的excel文件,所以找到了jxls,基本可以完全满足所有的项目需要。不使用easypoi的原因是那时候测试时候效果不是很好,项目中有很多复杂的报表(大量单元格合并和单元格样式),easypoi处理合并单元格时候容易出现残损的情况。

而且pol、jxl代码工作量大,编码效率很低且不方便维护。Jxls的话相对简单轻量,使用特定的标记在excel模板文件中来定义输出格式和布局。

jxls是通过预制excel模板,然后通过jxls响应API将我们应用程序的数据结合模板格式输出到相应的excel文件中,从而形成报表。




java报表生成器 java 生成报表_数据


报表的其他需求还有很多,比如前端查询,相关的组件很多,原理无非就是选择你所关注的信息(数据列),选择时间等(查询条件)生成数据集,然后在servlet中将数据集转成报表组件所需要的格式,传送到前台渲染。

2、图表类

涉及到报表的图表开发,就是饼图、柱状图那些,可以用echarts还有highchart。

这里要注意,如果是做web端的图表,不要使用java层的组件,使用js层的组件,因为java层的组件生成的是图片,而js是生成的web代码,如果有交互性的功能和动态功能,java层的组件是难以实现的,同时在java层构造图片也是比较严重消耗服务器性能的。

推荐使用js层图表组件库,常用的有echarts和国外的知名组件highchart,因为是js组件库,服务端只用推送数据到客户端,有js来绘制图层,因此不需要写文件下载的模块。


java报表生成器 java 生成报表_数据_02


这里总结一些报表开发常用的开源组件库吧:

  • Java office、pdf 操作组件库
  • Apache POI
  • JXL
  • iText
  • OpenOffice
  • PDFBox
  • jquery.table2excel.js

图表前端

  • ECharts
  • Highcharts
  • D3

后面我就不用java开发报表了,因为报表需求量大,以往的大量报表还要维护,然后还有各种复杂的表格形式难以捉摸容易出bug,所以后面就直接用专业的报表工具。

像报表导出,图表制作,开发少说2天,如果用报表工具基本上分分钟的事。哎,能有现成工具真的不要花时间和人力去开发应用来解决问题。

报表工具github是哪个有开源的,之前我们用过jaspereport一阵,好处就不多说了,网上一搜一大把。但是打印报表、复杂的数据计算有点鸡肋,加之我们要和很多应用系统做集成,报表工具要成为一个数据中台的角色,来集中开发个业务的报表,后面还是采购了FineReport。

我也算是亲身经历过从“开发——开源——商用报表工具”的人了。

Java开发报表工具——FineReport

如果有报表开发需求,没有开发能力,但有预算,采购工具是常用的手段,而且一步到位。工具的成本不比人力低?我们以前一个报表开发团队:4个程序员+6个excel做表。报表项目落地后,直接减半,当然工作量也更大了。

FineReport的话,简单介绍一下吧。

功能比较丰富,除了基础的数据展现、填报功能外,还支持定时推送,多级上报,打印导出,移动端,大屏展现等各种场景,俨然是个系统了。

学习成本低,只要学会简单的sql就可以开发,我当年java开发报表的技能早还给百度了。

开发速度快,可视化SQL取数,报表页面设计类似Excel、参数查询可批量查询并导出报表。