我通过调用
列出了系统中所有可用的字体 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字体。
答案 0 :(得分:4)
JVM不一定使用系统上安装的字体,它随附自己的字体,你可以在
看到JAVA_HOME / JRE / LIB /字体
为了使用JVM的字体,您需要创建字体并将其添加到上面的目录中,或者将新字体的目录添加到类路径中。
或者,您可以使用jar存档文件打包字体,在此处下载字体
或Microsoft true Type字体。
答案 1 :(得分: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]);
}
}
答案 2 :(得分:0)
是的,JVM不包含所有字体。您需要手动安装所有核心字体。 如果您使用的是Linux,那么这应该对您有所帮助:
答案 3 :(得分:0)
请参阅此页面。 有两种类型的字体。 1.物理字体 2.逻辑字体
答案 4 :(得分:0)
一些Windows机器上有两个用于安装字体的按钮:“为我安装”和“为所有用户安装”。 Java仅列出为所有用户安装的字体。
答案 5 :(得分:0)
我在使用 JavaFX 时遇到了同样的问题。 在 Windows 中,当您安装字体时,默认情况下它不位于
<块引用>%windir%\Fonts
正如预期的那样,而是在
<块引用>%homepath%\AppData\Local\Microsoft\Windows\Fonts
Java 中的某些类似乎不检查用户文件夹中安装的字体。 尝试通过右键单击并选择“为所有用户安装”来安装有问题的字体。 (见Screenshot)