鉴于有不少网友问到《SpringMVC与iReport(JasperReports) 5.6整合开发实例》这篇技术博客中,虽可以输出PDF格式的报表,但报表内容中若包含中文汉字,则无法正常显示。的确,整合开发实例中涉及到的PDF格式报表是不支持中文显示的,因为我的初衷是让大家熟悉SpringMVC与iReport的整合过程,并起到一个抛砖引玉的作用,所以PDF报表能否显示中文汉字压根没在考虑范围之内。
既然现在有不少网友遇到了这样的问题,刚好今天稍微有些空闲,就PDF如何显示中文的问题做下说明。
开始本示例之前,有必要先阅读我先前发布的《SpringMVC与iReport(JasperReports) 5.6整合开发实例》这篇博文,只有熟悉了SpringMVC与iReport的整合基础之后,才能更容易上手本示例教程。
开始之前,先来预览下最终的报表效果:
PDF中文显示需要itext和itextasian这两个jar文件的支持,尤其是itextasian,PDF报表能否显示中文就靠它了。很多网友肯定都知道这一点,但为什么还是不能正确显示中文呢?原因有二:要么itextasian这个包有问题,要么报表模板设计有问题。
其实这两个包在iReport的安装目录下也有,他们位于:${iReport安装根目录}\ireport\modules\ext下:
另外一点需要注意的是,我们的项目是使用Maven来管理Jar包依赖的,因此需要将上述两个Jar包导入到Maven本地库中,然后在项目POM文件中添加依赖。因此我已经写好了批处理,双击对应的bat批处理脚本即可将上述jar包导入到Maven本地库中(位于本项目的跟目录下)。
然后在项目POM文件中添加itextasian依赖:
<!-- iReport PDF中文支持 --> <dependency> <groupId>com.lowagie</groupId> <artifactId>itextasian</artifactId> <version>2.1.7.js2</version> </dependency>
1、在报表模板中添加一个“Style”,暂且命名为“zh_CN”。
2、设置样式“zh_CN”的<Pdf Font name>和<Pdf Encoding>两项参数:
3、指定显示字段使用样式“zh_CN”。
当然也可以不使用“Style”的方式,而是为每个字段都指定<Pdf Font name>和<Pdf Encoding>这两项参数,不过这样会很繁琐。记得保存、编译模板文件。
/** * 返回iReport报表视图,支持PDF显示中文 * @param model * @return */ @RequestMapping(value = "/reportChs", method = RequestMethod.GET) public String reportChs(Model model) { // 报表数据源 JRDataSource jrDataSource = new JRBeanCollectionDataSource(JavaBeanPerson.getListChs()); // 动态指定报表模板url model.addAttribute("url", "/WEB-INF/jasper/MvcIReportChsExample.jasper"); model.addAttribute("format", "pdf"); // 报表格式 model.addAttribute("jrMainDataSource", jrDataSource); return "iReportView"; }
发布项目,通过链接:http://localhost:8080/mvc-ireport-chs/reportChs访问生成的PDF报表。
项目源码:mvc-ireport-chs.zip