Font “xx字体” is not available to the JVM. See the Javadoc for more details. 终极版

1 篇文章 0 订阅
1 篇文章 0 订阅

windows下有的时候自定义的字体,jvm无法找到 ,但是我是安装到了windows上了,输出的jar报也是添加到系统依赖了,为啥还是报错,有人说修改jasper的默认配置文件,然后重新打包,这样会导致一些错误,而且很是麻烦,我们可以自己在java代码中手动注册字体,具体步骤如下

1、一个完整的字体包(你自己的)

2、双击安装

他会在windows的 C:\Windows\Fonts 生成该字体,代表已经在windows安装上了

3、ireport中使用该字体 

工具->选项->font->install font  选择那你的font所在位置 ->然后点击下一步,后面不用管,默认就可以了

4、导出jar包

上面安装了之后再ireport的字体下拉框中并没有该字体(xdsyy),我们需要进行一下操作才行!

然后就可以导出jar包到指定的位置,比如我的导出到桌面就是这样的

5、在ireport的环境中导入jar包支持,就可以得到相应字体了

这个时下拉框中就有 xdsyy 我们自定义的字体了

6、在java项目中报错  

Font 'xx字体' is not available to the JVM. See the Javadoc for more details. 

好像是说jvm认不到该字体,在windows环境下已经安装了该字体支持,不应该认不到才对,但是好像这个字体是我们自定义的

ireport是有个jar包默认是有字体,那些字体已经注册到jvm,我们自定义的却没有注册,所以有两种方式注册,其中网上盛行的一种是修改配置文件 xxxx.properties 然后是忽略错误,这种方式不太可靠

然后后来查资料可以通过java代码来注册:

在调用打印操作的时候先注册,注册代码如下:

BufferedInputStream inputStream = FileUtil.getInputStream(new File("C:\\Users\\Lenovo\\Desktop\\电子签名\\xdsyy.ttf"));
Font font = null;
try {
    font = Font.createFont(Font.TRUETYPE_FONT, inputStream);
} catch (FontFormatException e) {
   e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}
font = font.deriveFont(Font.PLAIN, 20);
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font);

但是放在本地磁盘上并不是一个好的方法,不可能让每个客户端都去安装一个ttf文件显然是不现实的,我们可以把它放到网络地址通过流的方式读取、

具体的操作如下,这是读取流的方式,后续操作参考上面的代码!

String ttfUrl="http://www.xxx.com/font/xdsyy.ttf"
InputStream inputStream = new URL(ttfUrl).openStream();

 

然后就不会报上面所说的错误了!

 

补充:由于你的环境是部署到liunx里面的,有可能是按照上面的操作依然报如图所示的问题,这个时候你需要在你后端的报表微服务里面继续调用上面的方法、

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值