1、问题描述
使用 JasperStudio 设计报表,并 Export as pdf 时,中文信息正确显示; 使用 JasperReport 生成报表时,中文信息无法显示; 其根本原因,是 JasperReport 报表引擎没有找到模板中指定的字体,比如模板中有个 Static Text 组件,如下:
这是一个静态文本组件,使用的中文字体为 simfang。 点击组件,可查看其属性信息: 可以在属性编辑栏中,对中文字体信息进行更改,比如改为 宋体、黑体 等。
JasperStudio 内置了一些字体,可以在 Font 列表中查看:
但是这些字体,有些能用来生成 pdf 文件,有些不能;比如使用 微软雅黑 字体,生成的 PDF 报表,中文信息能正常显示,但是使用 隶书 、微软雅黑 UI、宋体 等字体时,生成的 PDF 文件,中文信息缺失。当然,生成的 HTML 报表,一般都是没有问题的。
这种情况下,就需要添加特定的字体 font,来实现在 pdf 报表中显示中文信息。
2、添加字体到 JasperStudio 中
1、下载或生成所需字体的 .tff 文件:
windows 系统中,Windows -> Fonts目录中,有很多的字体文件: 有些时 ttc 格式,有些是 ttf 格式,比如微软雅黑就是 .ttc 格式的文件。需要使用转换工具将其转换为 .ttf 文件。
ttc 转 ttf 在线工具
2、在 JasperStudio 中添加字体文件
右击 project 节点,查看 properties -> Fonts,添加新的字体类型,例如下图中的 simfang,仿宋:
添加后,就可以在文本属性中使用新的字体类型了。.jrxml 文件中,如下:
3、添加多种新字体
添加多种字体:微软雅黑,宋体,楷体,黑体,行书等,如下:
在 JasperStudio 中,创建示例: 对应的 detail 栏的内容,如下:
在 Preview 窗口,执行 Export as PDF,可以导出 pdf 文件,能够正确的显示出中文信息: 这样的话,说明 JasperStudio 中的字体已经没有问题了。这样,可以在 JasperStudio 中设计报表模板,并根据模拟数据进行报表演示了。 但是当 JasperReport 根据给定的报表模板生成报表时,怎么获取到扩展的字体信息呢?
3、JasperReport 使用扩展字体
1、在 JasperStudio 中将扩展字体集,导出为 fonts.jar 文件:
生成的 jar 文件中,包含了字体的详细信息(ttf 文件和 meta 信息),可供 JasperReport 引擎使用!
2、将 fonts.jar 文件添加到 java 项目中:
可以将 fonts.jar 发布到项目仓库中,也可以通过 lib 的形式添加;只要保证 fonts.jar 在项目的 classpath 中即可! 我放到在resources下面 然后点击鼠标右键
然后就可以导出中文就不会缺失了。 备注: 默认情况下,当没有数据源信息存在于一个报告,JR不产生页面。另一个选项(可以在报告的whenNoDataType属性中设置)将打印除