JpGraph и русский язык
Автор: Александр Шиляев
Источник: http://blog.redgraphic.ru/as/06-08-03_78/
Кто сталкивался с необходимостью создания различных
графиков из PHP наверняка знают библиотеку JpGraph (http://www.aditus.nu/jpgraph/). Для тех кто
не знает - JpGraph это ОО библиотека на PHP, применяемая для
построения различных графиков. Сверх дизайнерского решения на
ней не построишь, но для того чтобы быстро и с минимумом кода
автоматически сформировать график в стиле excel вполне
сгодится. Требует установленной библиотеки GD (http://www.boutell.com/gd/).
Но как это часто бывает у буржуев, написать что-нибудь они
напишут, а вот сделать чтобы можно было писать на великом и
могучем - с этим проблемы. В том же JpGraph даже есть
некоторые настройки типа:
// Special unicode language
support
DEFINE("LANGUAGE_CYRILLIC",true);
// If you are setting this
config to true the conversion
// will assume that the input
text is windows 1251, if
// false it will assume koi8-r
DEFINE("CYRILLIC_FROM_WINDOWS",true);
Как эти настройки не изменяй - ничего не происходит. Либо
все выводится в виде кракозябр, либо в юникоде типа
&#xxxx. Оказывается на все так просто. Нужен еще шрифт с
кириллицей. Библиотека JpGraph (хотя больше не она, а GD)
может работать со стандартными TTF-шрифтами. А это очень
хорошо, когда отчет с графиками может быть оформлен не в виде
стандартных и набивших оскомину пиксельных шрифтов из unix'а,
а с помощью стандартных и набивших оскомину шрифтов из
windows'а. Так во всяком случае привычнее. Но сначала надо
сказать JpGraph'у где эти шрифты взять.
Для того чтобы настроить русские шрифты надо:
- Найти их на сервере. Обычно лежат в директории типа /usr/X11R6/lib/X11/fonts/TrueType/ или /usr/X11R6/lib/X11/fonts/TTF/.
- Проверить есть ли там стандартные юникодные шрифты и
поддерживают ли они кириллицу (как это сделать - личная
проблема каждого, у меня их там вообще не было).
- Если их там нет или они кириллицу не поддерживают, то
пишем их туда, например, из директории Winnt/fonts со своего
компьютера.
- Находим в конфигурационном файле JpGraph строчку типа DEFINE("TTF_DIR", ...) и
пишем на место директории ту, где нашли и записали шрифты.
Теперь шрифты есть и JpGraph их должен найти. Для этого в
своем графике определяем, например, заголовок как шрифт
Verdana (он должен быть на сервере):
$somegraph->title->SetFont(FF_VERDANA);
Дальше либо покажется русский заголовок графика, либо он
будет не в той кодировке, либо (что вероятнее) JpGraph скажет,
что на сервере не установлен компонент работы с TTF-шрифтами
(FreeType). Если так, то надо либо искать другой сервер, либо
перекомпилять PHP. У нас проблем с перекомпилением (слово-то
какое!) нет, поэтому пересобираем PHP с ключом --with-freetype-dir=/usr, где /usr это префикс установки проги
freetype, которая собственно и занимается поддержкой этих
fontov (сисадмин спешит на помощь).
Собственно все. Если есть проблемы с тем, что название
вывелось не в той кодировке (например в кои, а не в windows),
то идем в файл настроек и изменяем строку:
DEFINE("CYRILLIC_FROM_WINDOWS",true);
Вот теперь собственно все. Шрифты должны работать. Размеры,
тип шрифта можно установить там же с помощью метода SetFont().
Но для этого уже есть документация.