当前位置: 代码迷 >> 综合 >> Font “xx字体” is not available to the JVM. See the Javadoc for more details. 终极版
  详细解决方案

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

热度:70   发布时间:2023-09-19 12:47:11.0

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

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

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

2、双击安装

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

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

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

3、ireport中使用该字体 

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

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

4、导出jar包

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

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

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

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

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

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

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

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

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里面的,有可能是按照上面的操作依然报如图所示的问题,这个时候你需要在你后端的报表微服务里面继续调用上面的方法、

  相关解决方案