В Java у меня есть код, который хорошо работает на OSX, но не на Linux. Этот код загружает файл шрифта и использует Font.createFont ().
Вот код:
log.debug("Loading ttf file AmericanTypewriter.ttf");
InputStream americanTypewriterInputStream = MyClass.class.getClassLoader().getResourceAsStream("AmericanTypewriter.ttf");
log.debug("File AmericanTypewriter.ttf loaded");
Font americanTypewriter = Font.createFont(Font.TRUETYPE_FONT, americanTypewriterInputStream);
log.debug("Font created");
americanTypewriter = americanTypewriter.deriveFont(16f); // Font size 16
log.debug("Font sized at 16");
Как уже упоминалось, в OSX это работает хорошо, но не работает в Linux.
Фактический файл TTF был извлечен мной на Mac с помощью:
fondu /Library/Fonts/AmericanTypewriter.dfont
и захват результирующего файла AmericanTypewriter.ttf и добавление его в путь к ресурсу Java.
Я ожидал, что это будет работать и в Linux, поскольку нет предположения, что шрифт предустановлен на хосте (я добавляю его программно), но я мог что-то пропустить ... Вы можете помочь?
Лог выглядит так:
11:30:59,418 DEBUG MyClass:167 - Loading ttf file AmericanTypewriter.ttf
11:30:59,419 DEBUG MyClass:167 - File AmericanTypewriter.ttf loaded
java.awt.FontFormatException: Font name not found
at sun.font.TrueTypeFont.init(TrueTypeFont.java:437)
at sun.font.TrueTypeFont.<init>(TrueTypeFont.java:154)
at sun.font.FontManager.createFont2D(FontManager.java:1476)
at java.awt.Font.<init>(Font.java:454)
at java.awt.Font.createFont(Font.java:761)
...
EDIT :
Здесь должно быть что-то, чего мне не хватает. Сказав Java «посмотрите, вот файл ttf, он содержит всю необходимую вам информацию», не означает ли это, что он не зависит от платформы и действительно не имеет значения, какие шрифты установлены и где?
Разве в файле ttf нет всего, что нужно для Java?