JasperReports入门教程(二):中文打印
2021-03-21 16:26
标签:return shm chapter name cal test 位置 ref log 在上一篇中我们介绍了JasperReport的基本入门,也展示了一个报表。但是我们的示例都是使用的英文,如果我们把需要打印的数据改为中文会怎么样?下面我们就测试一下 预览的pdf界面会发现原来打印name的地方不显示任何数据了 为什么会出现这个问题呢?我们查找net.sf.jasperreports的jar包源码发现它并不包含中文的字体库。那么就好办了,我们只需要加上中文字体库就可以了。 1.我们可以在本地电脑的 C:\Windows\Fonts下找到你想要的字体文件,也可以使用我提供的字体文件 2.在JasperReport Studio工具的Window -> Preferences-> font 中add一个微软雅黑的字体 3.修改模板中需要显示中文的元素的字体为微软雅黑 1.在resources资源文件下增加fonts.xml和msyh.ttf字体文件 2.在resources资源文件下增加读取扩展字体的配置文件 jasperreports_extension.properties 配置好的代码结构如下 3.访问地址 http://localhost:8080/test/jasper?type=pdf 可以看到中文打印出来了 下面我们来分析下为什么需要按照上面来配置。因为JasperReport的jar包并未提供微软雅黑的字体的支持,所以我们需要通过提供的字体扩展的接口把我们需要的微软雅黑的字体在程序运行时可以读取到。 这个类比较简单只有一个方法,这个 那么追溯这个 查看这个方法可以发现它是加载实现了 继续向上追溯到类 这个方法的代码行较多,我就不贴出来了,那么我们关注下这个方法其中一行代码 这行代码是获取所有需要加载的配置文件资源,通过代码我们可以发现它最终是加载所有名称是 到这里我们应该理解上面配置文件jasperreports_extension.properties中的配置项的意义。 因为方便后续教程的演示,我们把公用的代码包括中文字体的支持都提起到一个公共的模块common,其他模块只引用即可使用,这样可以更好的专注本章节的代码。 本节代码和报表模板 JasperReports入门教程(二):中文打印 标签:return shm chapter name cal test 位置 ref log 原文地址:https://www.cnblogs.com/xyyz120/p/12681258.htmlJasperReports入门教程(二):中文打印
背景
HashMap
给JasperReport Studio工具增加字体
微软雅黑
msyh.ttf文件下载,提取码: bvmn给JasperReport增加扩展的字体资源文件
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.dejavu=jaspers/fonts/fonts.xml
实现原理
其中核心的类就是SimpleFontExtensionsRegistryFactory
,我们查看下这个类的源码public class SimpleFontExtensionsRegistryFactory implements ExtensionsRegistryFactory
{
public final static String SIMPLE_FONT_FAMILIES_PROPERTY_PREFIX =
DefaultExtensionsRegistry.PROPERTY_REGISTRY_PREFIX + "simple.font.families.";
public final static String PROPERTY_SIMPLE_FONT_FAMILIES_REGISTRY_FACTORY =
DefaultExtensionsRegistry.PROPERTY_REGISTRY_FACTORY_PREFIX + "simple.font.families";
@Override
public ExtensionsRegistry createRegistry(String registryId, JRPropertiesMap properties)
{
List
createRegistry
方法就是读取配置文件中net.sf.jasperreports.extension.simple.font.families
开头的配置项的字体文件。createRegistry
方法在什么地方使用的,可以追溯到类DefaultExtensionsRegistry
中的instantiateRegistry
方法ExtensionsRegistryFactory
接口的某一个类,并且调用instantiateRegistry
方法来读取的配置项,这里就是上面提到的SimpleFontExtensionsRegistryFactory
类。DefaultExtensionsRegistry
中的loadRegistries
方法,这个方法是加载所有的通过扩展注册进来配置,当然也包括通过扩展注册的字体。List
jasperreports_extension.properties
的文件,然后解析文件中的配置项并注册到JasperReport中protected List
##这行配置项是说明需要使用哪个注册工厂类来解析下面的配置项
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
##这行配置是配置了需要加载的字体文件的位置,配合上面的```SimpleFontExtensionsRegistryFactory```类来加载字体文件。
net.sf.jasperreports.extension.simple.font.families.dejavu=jaspers/fonts/fonts.xml
结束语
上一篇:简要说一下.Net的编译过程.
下一篇:快速提升网站排名的方法及策略