使用JasperSoft Studio编辑报表模板时,使用到了扩展的字体(特殊字体),在JAVA的工程上,需要做字体定义处理。
在Resources下增加 jasperreports_extension.properties 文件,在文件内配置字体的参数(字体配置文件)
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=jasperconf/fonts.xml
在字体配置文件fonts.xml中设定扩展字体的相关信息
<fontFamilies>
<fontFamily name="MingLiU">
<normal>fonts/mingliu.ttf</normal>
<!-- <bold>fonts/mingliu.ttf</bold>
<italic>fonts/mingliu.ttf</italic>
<boldItalic>fonts/mingliu.ttf</boldItalic> -->
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'MingLiU', Arial, Helvetica, sans-serif</export>
<export key="net.sf.jasperreports.xhtml">'MingLiU', Arial, Helvetica, sans-serif</export>
</exportFonts>
</fontFamily>
</fontFamilies>
配置后,原先使用到中文并且不显示中文的地方都正常了,不过一开始我没注释掉<bold>的定义,发现在报表模板中加粗的字体无效,还是正常的字体。折腾了很久,后来查看Jasper的处理源码,才发现如果定义了字体的<bold>,就会优先使用字体文件中的粗体字体,而我使用的字体文件,是没有包含粗体的数据的,因此总是普通的字体。
因此fonts.xml中定义的是由字体文件提供的特效,如果字体中没有,就不要定义,例如斜体效果也不需要定义,用报表模板的就可以。