JasperReports 不显示中文问题及解决方案

1、问题描述

使用 JasperStudio 设计报表,并 Export as pdf 时,中文信息正确显示;
使用 JasperReport 生成报表时,中文信息无法显示;
其根本原因,是 JasperReport 报表引擎没有找到模板中指定的字体,比如模板中有个 Static Text 组件,如下:

			<staticText>
				<reportElement x="130" y="10" width="95" height="30" uuid="3af8b7ce-eeca-4ebf-a75f-d2db315c726d"/>
				<textElement textAlignment="Center">
					<font fontName="simfang" size="15"/>
				</textElement>
				<text><![CDATA[套餐编码]]></text>
			</staticText>

这是一个静态文本组件,使用的中文字体为 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 栏的内容,如下:

<detail>
		<band height="155" splitType="Stretch">
			<staticText>
				<reportElement x="20" y="50" width="150" height="30" uuid="229658ae-a622-4f58-b790-0ab0586f4a00"/>
				<textElement>
					<font size="20"/>
				</textElement>
				<text><![CDATA[Hello World!]]></text>
			</staticText>
			<staticText>
				<reportElement x="200" y="20" width="230" height="30" uuid="d5e645af-cc75-48f7-924f-1371512a50d7"/>
				<textElement>
					<font fontName="xingshu" size="18"/>
				</textElement>
				<text><![CDATA[你好,世界]]></text>
			</staticText>
			<staticText>
				<reportElement x="200" y="62" width="100" height="30" uuid="090d90f4-a77a-485d-a7d7-9fa3a01ff8e0">
					<property name="com.jaspersoft.studio.unit.spacingAfter" value="px"/>
				</reportElement>
				<textElement textAlignment="Left">
					<font fontName="msyh"/>
					<paragraph lineSpacing="Single" spacingAfter="0"/>
				</textElement>
				<text><![CDATA[你好,世界!微软雅黑]]></text>
			</staticText>
			<staticText>
				<reportElement x="200" y="100" width="100" height="30" uuid="f3b38e4c-4649-4cf7-876a-6d7a53ade965"/>
				<textElement>
					<font fontName="simhei"/>
				</textElement>
				<text><![CDATA[你好,世界!黑体]]></text>
			</staticText>
			<staticText>
				<reportElement x="330" y="62" width="100" height="30" uuid="064b44b2-7c53-456c-ab81-6dfa39f0f840"/>
				<textElement>
					<font fontName="simkai"/>
				</textElement>
				<text><![CDATA[你好,世界!楷体]]></text>
			</staticText>
		</band>
	</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属性中设置)将打印除<detail>之外的所有报告部分。此报告包含详细信息部分,但仅包含一些静态数据。为确保本节也将被打印,最简单的方法是提供一个空数据源,其中包含一个空记录。
————————————————
版权声明:本文为CSDN博主「墨城之左」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/antony1776/article/details/116534431

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值