Работает ли Java со шрифтами PCF?

Я пытаюсь заставить IBM jre использовать шрифты PCF из установки X11 по умолчанию в моем Linux-боксе. В частности шрифт Adobe-Helvetica. Я пытался изменить fontconfig.properties в папке jre/lib, но независимо от того, что я делаю, швы Java используют некоторые другие шрифты. Я предполагаю, что есть какой-то алгоритм, как java VM пытается связать логические шрифты java с реальными физическими шрифтами в системе, даже если шрифт, указанный в конфигурации, не может быть использован. В Windows это довольно просто, но в Linux мне не удалось заставить его работать ни с чем, кроме шрифтов TrueType.
У кого-нибудь есть опыт настройки шрифтов на IBM jre в Linux?


person Ma99uS    schedule 26.11.2008    source источник
comment
Как ни странно, если вы погуглите шрифты Java PCF, вы получите эту страницу переполнения стека!   -  person skiphoppy    schedule 17.12.2008


Ответы (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 и более поздних версиях.

person skiphoppy    schedule 17.12.2008

Похоже, что пакет PCFFont позволяет использовать шрифты PCF из Java. К сожалению, я думаю, что это делается с помощью пользовательского класса PCFFont, который не расширяет класс java.awt.Font, поэтому я бы сказал, что его полезность, вероятно, ограничена. Однако это может дать некоторые указания на детали реализации для написания пользовательского подкласса Font, который может обрабатывать шрифты PCF. Поиск исходного кода не сразу очевиден; код именно этого класса находится здесь.

Я бы сказал, что автор кажется немного смущенным, потому что он говорит о преобразовании шрифтов TrueType в PCF, чтобы вы могли использовать их с его библиотекой, а Java уже изначально поддерживает шрифты TrueType. Но он, кажется, инженер из Sun, так что, возможно, он знал больше, чем я думаю; кроме того, это может быть просто очень устаревшим (было ли когда-нибудь время, когда Java не поддерживала TrueType?).

person skiphoppy    schedule 17.12.2008
comment
После всех исследований, которые мы провели, оказалось, что каждая версия JRE имеет серьезные внутренние изменения для обработки шрифтов, а современная версия больше не поддерживает шрифты PCF. Проект PCFFont кажется единственным способом использования шрифтов PCF, но его нельзя было легко внедрить в наш проект. - person Ma99uS; 16.01.2009
comment
В конце концов мы решили вместо этого придерживаться подходящего шрифта TTf. Итак, шрифты PCF отсутствуют. - person Ma99uS; 16.01.2009