【问题标题】:How to add Fonts to Azure Web Application Java JVM for server side use如何将字体添加到 Azure Web 应用程序 Java JVM 以供服务器端使用
【发布时间】:2017-08-25 22:39:06
【问题描述】:

在 Azure 中作为 Web 应用程序部署时,如何使我自己的自定义字体可用于 JVM? (注意 - 这与在 html 页面中提供它们并配置正确的 MIME 类型不同。我将字体应用于使用 lucee 和 Coldfusion 生成的图像。)

在旧世界中,当我们使用虚拟机时,我们只需将字体添加到系统字体文件夹中,JVM 就会在运行时提供它们。使用 Azure Web 应用程序,我无法访问此文件夹。我们正在运行 Java 8。

我认为应该可行,但似乎不行:

  • 使用 JAVA_FONTS 环境变量指定自定义字体文件夹的路径(其中包含 ttf 文件)
  • 进行 Java 调用以在我的 Web 应用程序中创建和注册字体。 getLocalGraphicsEnvironment / CreateFont / RegisterFont(这会注册字体,但垃圾收集器线程在 Disposer 上阻塞和崩溃 - 每隔几个小时就会让我的 JVM 崩溃。取出字体,它会运行顺畅)

现在它们对我不起作用的事实可能就像误解了该过程的确切语法一样简单。

如何加载我的字体?

【问题讨论】:

    标签: java azure fonts garbage-collection azure-web-app-service


    【解决方案1】:

    基于我在document 中找到的内容。

    我认为您的垃圾收集器线程崩溃的主要原因是 CreateFont 方法创建了大量的临时文件

    解决方案:

    你可以参考下面代码的sn-p替换inputStream方法。

    String pathString = FontLoader.class.getResource("/font/xxx.ttf").getFile();
    Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, new File(pathString));
    

    您也可以参考 SO 线程:Font.createFont leaves files in temp directory

    希望对你有帮助。

    【讨论】:

    • 我没有看到任何临时文件建立的迹象。createFont 仅在应用程序初始化时第一次调用时被调用 - 即使这样也只有 6 种字体。
    【解决方案2】:

    解决方案是在“应用程序设置”边栏选项卡上添加一个键值对,如下所示:

    JAVA_OPTS

    -Dsun.java2d.fontpath=D:\home\site\wwwroot\webapps\ROOT\App\include\fonts

    正确加载字体。 (我的垃圾回收bug还在,不过加载字体的问题已经解决了)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 2021-09-15
      • 2017-02-07
      • 1970-01-01
      • 2020-04-25
      • 2010-12-21
      相关资源
      最近更新 更多