Название шрифта не найдено в Linux - PullRequest
2 голосов
/ 11 октября 2009

В 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?

Ответы [ 5 ]

1 голос
/ 13 октября 2009

Чтобы ответить на мой собственный вопрос - это частичный ответ - я думаю, что проблема заключается в преобразовании шрифта из моего Mac в окно Linux. Я не понимаю, почему это так, но я попробовал тот же код на коробке linux с другими случайными шрифтами, которые я скачал из Интернета, и он работал нормально, просто этот шрифт доставляет мне трудные времена. Нет необходимости устанавливать шрифты на коробке. Если файл шрифта передается в Java-программу, как я, это все, что нужно.

Что меня действительно беспокоит, так это то, что я ожидал, что Java будет автономной, и java-программа, которая запускается на хосте x со всеми ресурсами, переданными ему, должна работать одинаково на хосте y, когда ей передаются те же ресурсы. Я предполагаю, что есть скрытая зависимость от Linux, которая мне просто не ясна.

Кто-нибудь может дать лучший ответ?

0 голосов
/ 16 августа 2016

Наши системные администраторы обновили Java до Java-версия "1.6.0_39" Среда выполнения OpenJDK (IcedTea6 1.13.11) (rhel-1.13.11.1.el6_8-x86_64) 64-битная серверная виртуальная машина OpenJDK (сборка 23.25-b01, смешанный режим)

на Версия Linux 2.6.32-573.7.1.el6.x86_64 (mockbuild@x86-031.build.eng.bos.redhat.com) (версия gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC)) # 1 SMP четверг, 10 сентября 13:42:16 ПО ВОСТОЧНОМУ ВРЕМЕНИ 2015

Я обошел похожую проблему, установив их с помощью yum

dejagnu.noarch                                         
dejavu-sans-mono-fonts.noarch                          
dejavu-serif-fonts.noarch                              
0 голосов
/ 11 октября 2009

О какой версии Linux мы говорим?

Идея включения шрифтов TTF в Linux появилась довольно недавно.

Например, в Ubuntu установка шрифтов TTF выполняется после установки ОС.

Вы можете найти полезный совет, если будете искать что-то о «Что делать ПОСЛЕ установки Ubuntu»

Я не уверен, будет ли это работать с Java, и будет ли «American Typewriter» одним из шрифтов TTF, предоставляемых на этапах после установки.

РЕДАКТИРОВАТЬ : Возможно, это не особенно актуально, но на этой странице обсуждается, как отсутствующие шрифты с точки зрения Emacs были "восстановлены" свежая установка.

0 голосов
/ 11 октября 2009

В зависимости от того, куда вы поместили файл, вам потребуется перестроить кэш шрифтов, выполнив

sudo fc-cache -f -v

Чтобы Ubuntu видел шрифт наверняка, вы можете поместить его в /usr/share/fonts/truetype/ и затем перестроить кэш шрифтов. Если я правильно помню, вы также можете поместить некоторые шрифты в ~/.fonts/.

0 голосов
/ 11 октября 2009

Добавить americanTypewriterInputStream к сообщению журнала. Может быть, это null.

Если это не так, файл может быть поврежден. Попробуйте открыть его с помощью другого инструмента (программы установки / просмотра шрифтов, например kfontview).

...