鉴于有不少网友问到《SpringMVC与iReport(JasperReports) 5.6整合开发实例》这篇技术博客中,虽可以输出PDF格式的报表,但报表内容中若包含中文汉字,则无法正常显示。的确,整合开发实例中涉及到的PDF格式报表是不支持中文显示的,因为我的初衷是让大家熟悉SpringMVC与iReport的整合过程,并起到一个抛砖引玉的作用,所以PDF报表能否显示中文汉字压根没在考虑范围之内。
既然现在有不少网友遇到了这样的问题,刚好今天稍微有些空闲,就PDF如何显示中文的问题做下说明。
一、特别说明:
开始本示例之前,有必要先阅读我先前发布的《SpringMVC与iReport(JasperReports) 5.6整合开发实例》这篇博文,只有熟悉了SpringMVC与iReport的整合基础之后,才能更容易上手本示例教程。
开始之前,先来预览下最终的报表效果:
二、开发环境
- 操作系统: Windows 7 x64
- JDK: JDK 1.7.0_79 x64
- 开发IDE: Eclipse Luna Service Release 2 (4.4.2) x64
- Maven: Apache Maven 3.2.3
- iReport: Jaspersoft iReport Designer 5.6.0
三、添加PDF中文显示依赖包itextasian
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>这两项参数,不过这样会很繁琐。记得保存、编译模板文件。
五、编写Controller方法
/**
* 返回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报表。
六、Demo源码下载
项目源码:mvc-ireport-chs.zip