Java 无法看到系统中所有已安装的字体

2022-09-03 01:51:19

我已通过调用列出系统中的所有可用字体

    GraphicsEnvironment graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
    Font[] fontNames = graphicsEnvironment.getAllFonts();
    for (Font s : fontNames) {
        System.out.println(s);
    }

在控制台上,我可以看到许多字体,但列表看起来非常不完整。例如:我的操作系统已安装“系统”字体,但在输出中我看不到该字体:

...
java.awt.Font[family=Sylfaen,name=Sylfaen,style=plain,size=1]
java.awt.Font[family=Symbol,name=Symbol,style=plain,size=1]
java.awt.Font[family=Tahoma,name=Tahoma,style=plain,size=1]
...

已安装的字体(抱歉波兰语操作系统):enter image description here

为什么?

另一件事是,在写字板中,我可以看到“系统”字体。但是,在MS Word 2010中,“系统”字体不可用。

问题不在于这种特定的“系统”字体。有几种字体已安装,但在Java中丢失。

编辑:我为什么要问?我的应用程序使用 BIRT 报告设计器生成带有报告模板的 .rpt 文件。接下来,我使用这些文件来渲染Swing组件,如JLabel,JTextField等。主要问题是:用户可以使用使用Java Swing无法处理的字体的字段生成报告。

BIRT 生成的示例 xml 文件部分:

<property name="fieldName">Blablabla{Label}</property>
<property name="fontFamily">"System"</property>
<property name="fontSize">16pt</property>

我们的客户要求指定生成的报告和 Java swing 组件之间的字体不能不同。

我想做的是要么处理Java中的所有系统字体,要么排除Java无法处理的BIRT字体。


答案 1

JVM不一定使用系统上安装的字体,它附带了自己的字体,您可以在

JAVA_HOME/jre/lib/fonts

要将字体与 JVM 结合使用,您需要创建字体并将其添加到上面的目录中,或者将新字体的目录添加到类路径中。

或者,您可以将字体与jar存档文件一起打包,在此处下载字体

http://cooltext.com/Fonts-Gothic

或微软真正的类型字体。


答案 2

一些Windows计算机有两个用于安装字体的按钮:“为我安装”和“为所有用户安装”。Java 仅列出为所有用户安装的字体。


推荐