如何在Java中使用Helvetica字体?

3

Helvetica在Windows、Mac OS X和Linux上都有不同形式的版本。在Windows系统下,我可以在Microsoft Word中看到它。在两个UNIX平台上,可以通过xlsfonts | grep -i helvetica找到它,它的名称似乎是adobe-helvetica。

但是JDK却找不到它!它没有出现在GraphicsEnvironment.getAllFonts()中,也没有在调用new Font("Helvetica", ...)时出现(即使使用了几个名称变体,如“Adobe Helvetica”),而是默认为“Dialog”字体,并以我使用的任何名称命名。

这种字体今天在每个相关的Java目标平台上都可用。我该如何在Java中使用它?


几乎是一个与https://dev59.com/gUbRa4cB1Zd3GeqPwgct相似的问题,我如何使任意字体文件对Java可用。 - Paul Tomblin
是的,差不多,但并不完全相同。我问了两个问题。这也与http://stackoverflow.com/questions/322050/does-java-work-with-pcf-fonts非常相似,但范围更有限(并且有更广泛的潜在解决方案)。 - skiphoppy
6个回答

4
Font f = new Font("Helvetica", Font.PLAIN, 10);  // make a new font object

ObjectName.setFont(f); // set the objects font using setFont();

其中,"Helvetica"是字体,Font.PLAIN定义了样式,10定义了大小。当然,它必须被安装才能工作,并且您可以使用CreateFont()捆绑它。

请参考Java字体API以获取更多参考资料。


根据问题的规定,当我调用new Font()时,我没有得到字体。 - skiphoppy
2
然后,您必须使用Font.CreateFont()并将其与您的应用程序捆绑在一起。 - John T

3

安装TrueType字体通常很简单。我在项目中使用maven,所以只需将字体文件放在资源目录中,并使用类加载器获取它。

InputStream is = MyClass.class.getClassLoader().getResourceAsStream("my/package/Avenir.ttf");
Font f = Font.createFont(Font.TRUETYPE_FONT, is);
is.close();

该字体应该被加载到内存中,以便在应用程序的其他地方使用字体名称。您可以通过使用下面的代码来确保这个功能,并查看系统中可用的字体。

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
String[] fontNames = ge.getAvailableFontFamilyNames();

for(String name : fontNames)
    System.out.println(name);

我有98%的把握认为,当您使用Font.createFont()创建字体时,getAvailableFontFamilyNames()不会将新创建的字体提供给它。 - skiphoppy
@skiphoppy 你说得对,但这就是 GraphicsEnvironment.getLocalGraphicsEnvironment().registerFont(Font f) 的作用。 - Sora.

2
我知道这并不是回答问题的方法,但是...
在Windows上,Helvetica并不总是安装的。我的工作机器(我现在正在使用的)没有安装Helvetica,尽管安装了Microsoft Office XP。

微软使用的Arial字体基本上是重新设计过的Helvetica。 - Nick Van Brunt
Arial和Helvetica有足够的区别,对于那些关心这些事情的人来说,它们是不能替代的。当你搜索“Helvetica”时,它肯定不会自动选择为替代品。 - Mark Ransom
而且,为了对答案进行评论,而不是对评论进行评论 - Helvetica 在 Windows 机器上可能相当罕见,特别是对于开发人员来说。 它从未与任何 Microsoft 产品捆绑在一起:http://www.microsoft.com/typography/fonts/default.aspx - Mark Ransom

1
在Linux上,有一个font.properties文件位于jre或jdk目录中,你应该能够向其中添加新字体,但我已经尝试了无数种不同的方法来添加字体,甚至是已知于操作系统并显示在xlsfonts中的字体,但从未成功过。

是的,今天早上我花了一些时间在这个问题上。我希望我可以制作自己的本地font.properties文件,而不是使用JDK中的文件。但是即使是java.home中的文件似乎也无法工作。而且我在某个地方读到说,这个文件在Windows上不受支持。 - skiphoppy

0

官方声明,Java保证提供的字体仅限于Lucida字体(Bright、Sans和Typewriter)。根据Java的安装和配置,它可能能够从您计算机的字体目录中读取字体,但这并不是保证。

如果必须使用Helvetica字体,则可以使用Font.CreateFont()捆绑字体,传入表示类型的int(Font.BOLD或Font.PLAIN等)和指向TrueType字体的InputStream。


-1

我认为如果你把字体文件放在src文件夹中,并从那里调用它,它将会起作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接