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

问题描述 投票:11回答:5

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

    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]
...

已安装的字体(对不起波兰操作系统):

这是为什么?

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

问题不在于这种特殊的“系统”字体。 Java中安装了几种但缺少的字体。

编辑:我为什么要问?我的应用程序使用BIRT Report Designer生成带有报告模板的.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字体。

java fonts awt birt
5个回答
4
投票

JVM不一定使用系统上安装的字体,它随附了自己的字体,你可以看到

JAVA_HOME / JRE / lib中/字体

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

或者,您可以使用jar存档文件打包字体,在此处下载字体

http://cooltext.com/Fonts-Gothic

或Microsoft真正的Type字体。


1
投票

你能试试吗?并确保你使用的是最新的JDK 7

public static void main(String[] args) 
{        
        GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
        String []fontFamilies = ge.getAvailableFontFamilyNames();
        for (int i = 0; i <fontFamilies.length; i++) 
        {
            System.out.println(fontFamilies[i]);
        }
}

0
投票

是的,JVM不包含所有字体。您需要手动安装所有核心字体。如果您使用的是Linux,那么这可以帮助您:

  1. 这将安装所有核心字体到您的JVM:sudo apt-get install msttcorefonts
  2. 之后,您可以在以下位置检查这些已安装的字体:/ usr / share / fonts / truetype / msttcorefonts

0
投票

请参阅此页面。有两种类型的字体。 1.物理字体2.逻辑字体

Java font documentation


0
投票

一些Windows机器有两个用于安装字体的按钮:为我安装并为所有用户安装。 Java仅列出为所有用户安装的字体。

© www.soinside.com 2019 - 2024. All rights reserved.