支持,您可以通过以下任意一个方式来实现。
方式一:通过挂载NAS盘共享字体文件。更多信息,请参见设置NAS存储。
方式二:在WAR包或JAR包中,将字体文件打包到Resource资源中加载。具体配置方法如下所示。
配置指引
本文只介绍方式二。
加载文件字体文件
// 指定字体类型为TrueType(适用于.ttf文件)
//指定字体文件路径:/Font/simfang.ttf
font = Font.createFont(Font.TRUETYPE_FONT, getClass().getClassLoader().getResourceAsStream("/Font/simfang.ttf")).deriveFont(Font.PLAIN, 30f);
判断Java程序的启动方式
public static boolean isStartupFromJar() {
try {
// 获取当前线程的上下文类加载器,并尝试获取根路径("")的所有资源URL
Enumeration<URL> resources = Thread.currentThread().getContextClassLoader().getResources("");
if (resources.hasMoreElements()) {
// 取第一个资源URL
URL url = resources.nextElement();
// 检查URL协议是否为"jar"(JAR包内资源的协议标识)
return StringUtils.equalsIgnoreCase(url.getProtocol(), "jar");
}
} catch (IOException e) {
// 资源加载失败时抛出运行时异常
throw new RuntimeException(e);
}
return false;
}
加载自定义字体
/**
* 设置字体
*/
private void setFont() throws Exception{
Font font;
LOGGER.info(EnvStartupUtil.isStartupFromJar());
if (EnvStartupUtil.isStartupFromJar()) {
//因为本地ide加载resource/font资源的方式与jar启动加载资源的方式不一样,所以这里判断一下是以什么方式加载的
font = Font.createFont(Font.TRUETYPE_FONT, getClass().getClassLoader().getResourceAsStream("/Font/simfang.ttf")).deriveFont(Font.PLAIN, 30f);
}else {
font = Font.createFont(Font.TRUETYPE_FONT, new File(root+"\\backend\\src\\main\\resources\\Font\\simfang.ttf")).deriveFont(Font.PLAIN, 30f);
}
GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(font);
g2d.setFont(font);
}
该文章对您有帮助吗?