获取字体文件作为File对象或获取其路径

时间:2010-01-07 09:15:47

标签: java file fonts path

我在Java中有一个Font对象用于字体文件。我需要将该对象转换为File对象或获取字体文件路径。

有办法做到这一点吗?


我在这里做的是从外部库调用一个方法来加载一个字体文件以便以书面形式使用它:

loadTTF(PDDocument pdfFile, File fontfile);

所以我想让用户使用以下命令从操作系统中定义的字体中选择一种字体:

GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();
Font[] fonts = e.getAllFonts();

然后当用户选择字体时,我将其传递给loadTTF(...)方法以加载它。

这里有不好的做法吗?

3 个答案:

答案 0 :(得分:5)

// use reflection on Font2D (<B>PhysicalFont.platName</B>) e.g.
Font f = new Font("Courier New", 0, 10);

Font2D f2d = FontManager.findFont2D(f.getFontName(), f.getStyle(),      
               FontManager.LOGICAL_FALLBACK).handle.font2D;

Field platName = PhysicalFont.class.getDeclaredField("platName");
platName.setAccessible(true);
String fontPath = (String)platName.get(f2d);
platName.setAccessible(false);

// that's it..
System.out.println(fontPath);

答案 1 :(得分:3)

好的......这将返回字体文件路径:

String fontFilePath = FontManager.getFontPath( true ) + "/" + FontManager.getFileNameForFontName( fontName );

我在Windows和Linux中尝试过这种方法,但两种方法都运行良好。

答案 2 :(得分:1)

没有

Java中的Font只是一种表示和定义字符如何以图形方式显示的定义。它与文件系统无关,技术上甚至不需要最终在文件中定义(例如,参见采用任意输入流的createFont()方法,该方法可以来自任何地方,例如网络套接字)。无论如何,对于你来说,能够获得定义字体的底层系统文件的路径肯定会是一个荒谬的抽象中断。

如果您依赖于接受文件,我建议您可能在您的其他方法中做错了。或者,如果真的需要这样做,那么你在这个方法中做错了,认为Font对象与底层文件有简单的关联。如果您确实需要获取特定字体的文件路径,则需要从不涉及java.awt.Font的不同角度处理它。