JasperReport 错误:net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '宋体' is not available
JasperReport 错误:net.sf.jasperreports.engine.util.JRFontNotFoundException: Font '黑体' is not available
原因:
(1)inux在没有安装报表所需中文字体的情况
1.安装方法——转到Linux环境下的/usr/share/fonts路径下,新建一个dir如zh_CN,把准备好的中文字体传到该目录下(中文字体的获取可以从windows环境的C:/Windows/Fonts下拷贝~),再执行如下命令:
mkfontscale
mkfontdir
fc-cache -fv
即可成功安装字体。可以执行命令:
fc-list
查看是否安装好字体。
2..在项目的classes目录下加一个jasperreports.properties配置文件,添加内容如下:
net.sf.jasperreports.awt.ignore.missing.font=true
再重启项目
2.系统为英文版,无法识别中文
方案一:
将系统语言切换为中文
方案二:(部署项目比较麻烦)
1、把需要用到的字体(可以直接拷贝windows系统的C:\WINDOWS\Fonts 下的相关字体)拷贝当前项目的classpath下,一般为classes目录下
2、在classpath里添加 jasperreports.properties 属性文件
net.sf.jasperreports.awt.ignore.missing.font=true
方案三:(我使用的是这个方法)
修改jasperreports-6.8.0.jar的JRDesignTextElement类
将中文字体名换成英文名
package net.sf.jasperreports.engine.design;
import java.awt.Color;
import java.io.IOException;
import java.io.ObjectInputStream;
import net.sf.jasperreports.engine.JRDefaultStyleProvider;
import net.sf.jasperreports.engine.JRFont;
import net.sf.jasperreports.engine.JRLineBox;
import net.sf.jasperreports.engine.JRParagraph;
import net.sf.jasperreports.engine.JRTextElement;
import net.sf.jasperreports.engine.base.JRBaseLineBox;
import net.sf.jasperreports.engine.base.JRBaseParagraph;
import net.sf.jasperreports.engine.design.events.JRPropertyChangeSupport;
import net.sf.jasperreports.engine.type.HorizontalAlignEnum;
import net.sf.jasperreports.engine.type.HorizontalTextAlignEnum;
import net.sf.jasperreports.engine.type.LineSpacingEnum;
import net.sf.jasperreports.engine.type.ModeEnum;
import net.sf.jasperreports.engine.type.RotationEnum;
import net.sf.jasperreports.engine.type.VerticalAlignEnum;
import net.sf.jasperreports.engine.type.VerticalTextAlignEnum;
import net.sf.jasperreports.eng