2008-11-26 133 views
1

我正在试图让IBM jre在Linux机器上使用默认X11安装中的PCF字体。特别是adobe-helvetica字体。我曾经尝试修改jre/lib文件夹中的fontconfig.properties,但无论我使用Java接口来使用其他字体。我想有一些算法java VM试图将java逻辑字体链接到系统中的实际物理字体,即使在config中指定的字体不能使用的情况下。在Windows上,它非常简单,但在Linux上,我无法使用除TrueType字体以外的任何其他功能。
任何人都有在Linux上配置IBM jre的字体的经验吗?Java是否可以使用PCF字体?

+0

幽默地说,如果你是谷歌的“Java PCF字体”,你会得到这个堆栈溢出页面! – skiphoppy 2008-12-17 18:37:59

回答

1

我花了整个早上了解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及更高版本中使用。

1

PCFFont package似乎提供了使用Java的PCF字体的能力。不幸的是,我认为它使用不扩展java.awt.Font类的自定义PCFFont类,所以我认为它的用处可能是有限的。然而,它可能会给出一些指针来实现编写可以处理PCF字体的Font的自定义子类的实现细节。找到源代码并不是很明显;代码确切的类是here

我想说作者似乎有点困惑,因为他谈论了将TrueType字体转换为PCF,以便您可以将它们与库一起使用,并且Java本身已经支持TrueType字体。但他似乎是来自Sun的工程师,所以也许他知道的比我想象的要多。此外,这可能会过时(Java曾经有过一段时间不支持TrueType?)。

+0

经过我们所做的所有研究,像每个版本的JRE都有​​接缝引起字体处理的变化,现代版本不再支持PCF字体。 PCFFont项目接缝是使用PCF字体的唯一方式,但它不能轻松注入到我们的项目中。 – Ma99uS 2009-01-16 15:17:35