JasperReports+ireport的使用心得

JasperReports+ireport的使用心得

前言

最近,同样是所做Java项目中有涉及到报表功能这一块,经过自己一段时间的摸索,毅然选择了整合JasperReports来开发报表功能。选择它的原因有:1、JasperReports是纯Java开发的开源报表软件工具(虽然其文档要收费,但这并不影响使用,哈哈);2、JasperReports开发报表有iReport之类的可视化工具来制作报告模板,极大的方便了模板的制作;3、JasperReports的支持的报表格式还是很丰富的(包括PDF、HTML、XLS、CSV和XML文件),虽然最好的是PDF(这是自己在实践中发现的),还有就是对图形报表的支持也较全面,能应付一般的需求吧。 好了,尽管JasperReports有这些好的方面,但是在使用过程中,还是碰到了很多的坑和要注意的地方。当然最后都顺利解决了麻烦,但还是值得总结一下,为以后想使用JasperReports开发报表的同学少走些弯路和注意的某些细节。

碰到的问题及解决

iReport工具制作模板

这里说一下,对于之前完全没有接触过的开发人员,这是一个循序渐进的过程;我也是,在经过大量的百度搜索和实践后,才会有不断的理解和积累,自然对工具的使用就熟悉了,能应付一般的模板设计了;最后,我在这里要着重提三点需要注意的地方,也许也是你会碰到的问题,具体如下:

iReport的安装

安装的话,我这里也不再赘述,很简单的操作,可自行百度;提供一下下载链接:https://community.jaspersoft.com/project/ireport-designer/releases。本人项目中使用的是iReport-5.5.0版本,值得重要一提的就是会有安装好之后,打开会闪退的问题,这是由于JDK版本高的缘故(我用的是JDK-1.8),降低JDK版本就可以解决问题,具体的操作这里提供下链接:https://blog.csdn.net/aust_glj/article/details/52291240,希望能帮到您。

图形报表的设计

模板的设计,入门的话可以自行百度,具体的话还是实际的业务要求了。我这里要说的是,由于我这边是图形统计报表,在自己的摸索后有了一点小小的理解,就是图形报表的设计chart最好是放到iReport的Summary区域内,具体当你实践后会有所体会,希望可以帮助到您。

导出pdf中文字体不显示

当你一步一步设计好报表模板后,然后编译也没有问题的话,之后预览(当然你得有数据源最好,不然图形是不会显示的,至少我的是这样)可能会ok,但是生成的pdf文件打开后会发现中文一个都没有。不要着急,这个只要多设置一下就可以了(当然我是就我项目中遇到的情况而言),就是在你的模板中按Ctrl选中所有中文部分(不包括图形)并在其属性框中设置如下: Font name: 宋体 PDF font name: STSong-Light PDF Encoding: UniGB-UCS2-H(Chinese Siplified) PDF Embeded: √ 然后预览下导出pdf的显示效果,应该ok啦,至少我的是这样啦。 具体的操作,这里还是提供下链接:https://blog.csdn.net/zhanglu1236789/article/details/45584045

Java项目引入JasperReports报表制作

首先,大致的说一下,利用JasperReports开发报表还是非常便捷的,前提是模板制作好了。JasperReports封装的方法极大的简化了开发人员的代码量,所以JasperReports还是非常不错的制作报表的选择。

Maven项目JasperReports相关jar包的引入

Maven中JasperReports引入
<!-- jasperreport -->
<dependency>
  <groupId>net.sf.jasperreports</groupId>
  <artifactId>jasperreports</artifactId>
  <version>5.5.0</version>
  <exclusions>
    <exclusion>
      <groupId>com.lowagie</groupId>
      <artifactId>itext</artifactId>
    </exclusion>
  </exclusions>
</dependency>

项目找不到中文字体包的问题

当你用iReport工具制作好模板后,放到Java项目中生成报表时,极大可能会遇到报找不到中文包的错。这时就需要在项目maven中添加iTextAsian支持,具体的操作见链接:https://blog.csdn.net/D2EF68A85BC/article/details/53905718 下面是我的maven依赖

<dependency>
  <groupId>com.lowagie</groupId>
  <artifactId>itextasian</artifactId>
  <version>1.5.2</version>
</dependency>

可能你会遇到,maven下载不了该jar包,这样你可以用到如下链接(单独下载jar包放到本地maven仓库):https://blog.csdn.net/D2EF68A85BC/article/details/53905718

导出或预览html格式报表图形不显示

在我的报表制作过程中,导出html格式的报表文件时不出意外的遇上了报表图像只有框框,不显示的问题,解决方式如下:

  • 1.在项目的web.xml文件中加入下面的代码:

    <!-- jasperreports -->
      <servlet>
        <servlet-name>ImageServlet</servlet-name>
        <servlet-class>net.sf.jasperreports.j2ee.servlets.ImageServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>ImageServlet</servlet-name>
        <url-pattern>/servlets/image</url-pattern>
      </servlet-mapping>
    
  • 2.在导出的java方法代码里加入下面代码:

    exporter.setParameter(
        JRHtmlExporterParameter.IMAGES_URI, 
        request.getContextPath()+"/servlets/image?image=");
    

具体的操作可以看如下链接: https://www.cnblogs.com/love540376/articles/4494921.html

项目部署Linux的问题

也许你也会遇到,在本机或windows系统环境下报表测试的各种情况都正常,然后你开开心心将其部署到Linux服务器,一使用会惊奇的发现又是各种问题。这里我就讲一下,我在这个过程中遇到的两个问题。

  • 中文不显示问题 部署Linux服务器后,发现报表中文不能显示;查看日志,会发现提示找不到‘宋体’(因为我模板里使用的是宋体)。针对这个问题,百度后的解决方式如下(链接): http://happyqing.iteye.com/blog/2185469 按上面链接的方法是可以解决中文显示的现象,但是又发现图形中中文字体的部分全部是方框乱码,也就是还有下面的问题。

  • 图形中的中文显示为方框问题 依然求助于网络,可百度好久都没有找到方式解决。在不懈的努力下,后来才发现是自己搜索的关键词不对导致的答非所问。我找到的方法如下(链接): https://blog.csdn.net/qq_40809549/article/details/80523849 成功的解决了方框乱码的问题,感谢博主的分享。

总结

一路下来,还是比较顺利地解决了项目业务的需求,虽然中间遇到了不少的坑,但这也是无可避免的,同时它也是一种知识的积累过程,相信对后来JasperRe的使用会有帮助。总之,JasperReports对想使用免费开源软件工具开发自定义模板报表来说还是非常好的选择;尽管在我的项目中只是其中的一部分功能(图形报表、多张报表连续打印输出等等),但是我觉得她应该还有更多高级的功能等待我去发现和使用(比如复杂些的交叉报表等还没有涉及)。话说回来,JasperReports的功能已经很丰富了,但在使用的过程中还是有一些不足之处的。典型的就有: - 1.iReport设计的模板,图形的主题不够丰富,而且引入Java项目中会JDK会报找不到主题的错,此时同样需要引入JasperReports的chart-theme包(切记,如果你也遇到了); - 2.导出的报表(包含图形)除了PDF格式比较清晰点外,像html/word格式下图形是比较模糊的,尤其是图形(像柱状图)的横轴上的字体有点扭曲,还有导出的word编排的也不好; - 3.报表中有使用table来输出数据,但是有一点遗憾就是列的相同项不能合并分组,查了很多资料,好像这是不能解决的问题(有方式分组,但显示会不美观); - 4.饼图的使用过程中有发现:当设计好模板的几种颜色后(比如:A数据为红色、B数据为黄色、C数据为蓝色、D数据为绿色),但实际数据中(只有B数据和D数据,或者说A数据和C数据为0)显示的却是B数据为红色、D数据为黄色;当然这不是大问题,只是有点纠结,不知是否是还没完全玩透它的缘故,如果有知道的同学也欢迎提供解决方法哟。 最后,还是要再次感谢网络上的同学的热情分享,正因为有你们的无私分享和发文才能使我学习到新的知识。thank you guys!

附录(贴上有帮助的链接,当然也包括上面中间的链接)

发布了8 篇原创文章 · 获赞 20 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_37489029/article/details/80975219