Я пытаюсь заставить IBM jre использовать шрифты PCF из установки X11 по умолчанию в моем Linux-боксе. В частности шрифт Adobe-Helvetica. Я пытался изменить fontconfig.properties в папке jre/lib, но независимо от того, что я делаю, швы Java используют некоторые другие шрифты. Я предполагаю, что есть какой-то алгоритм, как java VM пытается связать логические шрифты java с реальными физическими шрифтами в системе, даже если шрифт, указанный в конфигурации, не может быть использован. В Windows это довольно просто, но в Linux мне не удалось заставить его работать ни с чем, кроме шрифтов TrueType.
У кого-нибудь есть опыт настройки шрифтов на IBM jre в Linux?
Работает ли Java со шрифтами PCF?
Ответы (2)
Я провел все утро, изучая шрифты Java. Существует множество ограничений, некоторые из которых сняты в Java 1.6. У меня нет ответов, но вот некоторая информация, которая у меня есть, которая может оказаться полезной.
Java внутренне различает системные шрифты и созданные шрифты. (Новости для Sun: было бы неплохо прояснить это с помощью подклассов!) Системные шрифты, похоже, являются шрифтами, установленными в JRE, возможно, плюс некоторые из шрифтов, установленных в вашей системе. Но видимо не все шрифты установлены в вашей системе; У меня тоже есть adobe-helvetica в моей системе Linux, но, похоже, она недоступна из Java ни под каким именем, которое я могу придумать.
Тем временем вы можете создавать шрифты из файла шрифта с помощью метода Font.createFont(). Вы должны указать тип файла шрифта. Единственные константы, которые я нашел для указания этих типов в классе Font, — это TRUETYPE_FONT и TYPE1_FONT. Таким образом, похоже, что если шрифты PCF доступны, это не делается явным путем предоставления константы для их указания. Может кто знает больше. Я видел в Интернете некоторую информацию об использовании растровых шрифтов в Java ME, поэтому должно быть как-то возможно использовать другие типы шрифтов.
Когда у вас есть созданный шрифт, вы можете добавить его в концепцию доступных шрифтов JVM с помощью вызова GraphicsEnvironment.registerFont(), но это доступно только в Java 1.6 и более поздних версиях.
Похоже, что пакет PCFFont позволяет использовать шрифты PCF из Java. К сожалению, я думаю, что это делается с помощью пользовательского класса PCFFont, который не расширяет класс java.awt.Font, поэтому я бы сказал, что его полезность, вероятно, ограничена. Однако это может дать некоторые указания на детали реализации для написания пользовательского подкласса Font, который может обрабатывать шрифты PCF. Поиск исходного кода не сразу очевиден; код именно этого класса находится здесь.
Я бы сказал, что автор кажется немного смущенным, потому что он говорит о преобразовании шрифтов TrueType в PCF, чтобы вы могли использовать их с его библиотекой, а Java уже изначально поддерживает шрифты TrueType. Но он, кажется, инженер из Sun, так что, возможно, он знал больше, чем я думаю; кроме того, это может быть просто очень устаревшим (было ли когда-нибудь время, когда Java не поддерживала TrueType?).