jasperreports通过Java代码生成PDF的时候不能获取中文字体,报错提示如下:
net.sf.jasperreports.engine.JRRuntimeException: Could not load the following font:
pdfFontName: STSong-Light
pdfEncoding: Identity-H
isPdfEmbedded : true
本次环境:jasperreports使用的版本是6.12.2,jaspersoft studio使用的版本是6.18.1,截图如下:
解决方案:
1.首先在项目资源文件目录下新建目录fonts
2.其次fonts目录新建两个文件:fonts.xml 和 STSONG.TTF
fonts.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<fontFamilies>
<fontFamily name="SansSerif">
<normal>fonts/STSONG.TTF</normal>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
<exportFonts>
<export key="net.sf.jasperreports.html">'华文宋体', Arial, Helvetica, sans-serif</export>
<export key="net.sf.jasperreports.xhtml">'华文宋体', Arial, Helvetica, sans-serif</export>
</exportFonts>
</fontFamily>
</fontFamilies>
STSONG.TTF字体文件,内容如下:(该字体可以在网上下载)
3.接着在项目资源文件目录下新建文件jasperreports_extension.properties
jasperreports_extension.properties内容如下:
配置文件第一行内容可以注释掉,不影响!
#net.sf.jasperreports.awt.ignore.missing.font=true
net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory
net.sf.jasperreports.extension.simple.font.families.lobstertwo=fonts/fonts.xml
最后重新启动项目进行验证就成功了,既没有报错,PDF文件也生成了!
总结:jasperreports对中文字体支持不友好,好像是每个版本或多或少都有类似的问题,那么针对其他版本也可以优先使用下上述方法,如果不好使,再考虑其他方法。如果其他朋友有类似的问题,欢迎留言,当然如果有解决方案,那更是扫榻相迎!