jdk7:sun.font.fontManager替换/如何从fontname获取文件名信息

时间:2012-12-03 13:33:20

标签: java fonts java-7 jdk-internal-api

使用Oracle(Sun)JDK6并尝试迁移到Oracle JDK7

我正在使用sun.awt.GraphicsEnvironment查找所有系统字体,以便使用它们来更改我的pdf文件中使用的pdf字体。这是我正在使用的确切代码:

GraphicsEnvironment gEnv = GraphicsEnvironment.getLocalGraphicsEnvironment();

// get all system fonts
final Font[] fonts = gEnv.getAllFonts();

之后我需要在系统上获得确切的字体文件路径,所以我使用:

FontManager.getFontPath(true) + "/" +
               FontManager.getFileNameForFontName(font_name);

现在的问题是sun.font.FontManager不再是类并且已经转换为接口。我在网上搜索并提出了一些我不满意的解决方案,我正在寻找其他想法来帮助解决我的问题。

我找到的解决方案:

  1. 在Java 6而不是Java 7上部署我的项目(不建议使用Java 7中的一些新功能)。
  2. 我在线找到了FontManager类的代码,但是使用它需要包含很多其他的类/接口,这个过程看起来很虚拟和耗时。如果我被允许使用该代码,因为它是Sun公司的专有权,我也不是。
  3. 我需要的是: * 一种在系统上找到确切字体文件路径的方法 *。欢迎所有想法。

2 个答案:

答案 0 :(得分:3)

你不是说你使用的是哪个JDK(Oracle,OpenJDK,..)。可能你有

FontManagerFactory.getInstance()

可用的。或者是接口实现Win32FontManager(如果你在Windows上)?

答案 1 :(得分:0)

此代码适用于 Windows 10 和 IBM Java 8

sun.font.SunFontManager.getInstance().getPlatformFontPath(true)

但在 macOS 11 和 AdoptOpenJDK 8/11 上,返回空字符串。