SAE支持安装字体吗?

支持,您可以通过以下任意一个方式来实现。

  • 方式一:通过挂载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);
    }