我正在尝试让 IBM jre 在我的 linux 机器上使用默认 X11 安装中的 PCF 字体。特别是 adobe-helvetica 字体。我已经尝试修改 jre/lib 文件夹中的 fontconfig.properties,但无论我做什么 Java 接缝都可以使用其他字体。我想有一些算法如何 java VM 尝试将 java 逻辑字体链接到系统中的实际物理字体,即使在配置中指定的字体无法使用的情况下也是如此。在 Windows 上这很简单,但在 Linux 上,除了 TrueType 字体之外,我无法让它使用任何东西。
有人有在 Linux 上的 IBM jre 上配置字体的经验吗?
2 回答
我整个上午都在学习 Java 字体。有很多限制,其中一些在 Java 1.6 中被删除。我没有任何答案,但这里有一些我掌握的信息可能会有所帮助。
Java 在内部区分系统字体和创建的字体。(Sun 的新闻快讯:最好通过子类化明确这一点!) 系统字体似乎是安装在 JRE 中的字体,可能加上安装在系统上的一些字体。但显然不是您系统上安装的所有字体;我的 Linux 系统上也有 adobe-helvetica,但似乎无法以我能想到的任何名称从 Java 访问它。
同时,您可以使用 Font.createFont() 方法从字体文件创建字体。您必须指定字体文件类型。我发现在 Font 类中指定这些类型的唯一常量是 TRUETYPE_FONT 和 TYPE1_FONT。所以看起来如果 PCF 字体可用,它并没有通过提供一个常量来指定它们来明确。也许别人知道的更多。我确实在网上看到了一些关于在 Java ME 中使用位图字体的信息,因此必须以某种方式使用其他类型的字体。
创建字体后,您可以使用 GraphicsEnvironment.registerFont() 调用将其添加到 JVM 的可用字体概念中,但这仅适用于 Java 1.6 及更高版本。
PCFFont包似乎提供了使用 Java 中的 PCF 字体的能力。不幸的是,我认为它是通过一个不扩展 java.awt.Font 类的自定义 PCFFont 类来实现的,所以我想说它的用处可能是有限的。但是,它可能会为编写可以处理 PCF 字体的自定义 Font 子类提供一些实现细节的指针。找到源代码并不是很明显。该确切类的代码在这里。
我想说作者似乎有点困惑,因为他谈到将 TrueType 字体转换为 PCF 以便您可以将它们与他的库一起使用,并且 Java 已经原生支持 TrueType 字体。但他似乎是 Sun 的工程师,所以也许他知道的比我想象的要多;此外,这可能已经过时了(Java 有没有不支持 TrueType 的时候?)。