jdk7: замена sun.font.fontManager / как получить информацию о имени файла из шрифта

Использование 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.

Что мне нужно, это: *Способ найти точный путь к файлу шрифта в системе*. Все идеи приветствуются.

2 ответа

Решение

Вы не говорите, какой JDK вы используете (Oracle, OpenJDK, ..). Возможно, у вас есть

FontManagerFactory.getInstance()

имеется в наличии. Или реализация интерфейса Win32FontManager (если вы на Windows)?

Этот код работает в Windows 10 и IBM Java 8.

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

Но в macOS 11 и AdoptOpenJDK 8/11 возвращается пустая строка.

Другие вопросы по тегам