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

Java jdk7:sun.font.fontManager替换/如何从fontname获取文件名信息,java,fonts,java-7,jdk-internal-api,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.getAllFon

使用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
不再是一个类,而是已转换为一个接口。我在网上搜索,找到了一些我不满意的解决方案,我正在寻找其他的想法来帮助解决我的问题

我找到的解决方案:

  • 在Java6而不是Java7上部署我的项目(不推荐,因为我在Java7中使用了一些新特性)
  • 我在网上找到了FontManager类的代码,但是使用它需要包含很多其他类/接口,而且这个过程看起来很虚幻和耗时。此外,如果我被允许使用该代码,我也不会,因为它是Sun公司的专有代码

  • 我需要的是:*一种在系统上查找确切字体文件路径的方法*。欢迎所有想法

    您没有说您使用的是哪个JDK(Oracle、OpenJDK等等)。可能你有

    FontManagerFactory.getInstance()
    

    可用。或者inteface实现
    Win32FontManager
    (如果您在Windows上)?

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

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

    但是在macOS 11和OpenJDK 8/11上返回一个空字符串。

    真正的问题是“如何找到在系统上找到确切字体文件路径的方法”@Jayan,是的,我知道。十年前被请求加入Java:@Jayan,我得到了赏金,谢谢。在您的特殊情况下,解决方案是什么?我使用反射并访问保存文件路径的变量。我稍后会把代码放在这里。@Jayan:你能把代码放在这里吗?我现在也有同样的问题,伙计,你找到解决办法了吗?Marcel Stör关于使用Win32FontManager的回答只在Windows中帮助解决了这个问题。我怀疑它在Linux或Mac操作系统上不起作用。