MYSTERRIA3.0

GD::Graph и русский язык

Эта тема не раз поднималась на форумах, в мэйл листах и вот пришлось потрогать все это своими руками... Делюсь опытом :)

Что имеем, что скачать...

Итак, во-первых для того, чтобы что-то вообще чертить в Линуксе, включая GD нам нужна библиотека libgd. Гдее ее взять написано в README модуля GD. Я использовал сырцы.

Далее запасаемся дистрибуцией FreeType2. GD работает ТОЛЬКО со второй версией FreeType. Я компилил FreeType из исходников.

Ну и собственно сами GD и GDTextUtils

Установка

Последовательность имеет значение!!!

FreeType2
Первым делом - самолеты... Ставим библиотеку ФриТайп...

LibGD

За тем устанавливаем сам libGD. Перед установкой читать доку. При надобности указать руть к установленной библиотеке FreeType

Ну и наконец модули Perl

GD устанавливается примерно так...

gzip -dc ./GD-[Ваша версия GD] | tar xf -
cd ./GD-2.16
perl Makefile.PL -lib_ft_path [указать путь к FreeType]
make
make install

Текст Утилсы...

gzip -dc ./GDTextUtil-0.86.tar.gz | tar xf -
cd ./GDTextUtil-0.86
perl ./Makefile.PL
make
make install
 

Если после запуска perl ./Makefile.PL нет ругани на отсутствие поддержки TTF, все прошло успешно.

Теперь немного перла...

Мы установили все модули, теперь можно приступить к рисованию... Сразу скажу, что стандартные шрифты GD не русифицированы и мы их использовать не будем, вместо этого мы берем русиифицированные ttf шрифты из windows, например arial.ttf

$graph->set( ...
x_label => 'дни',
...
) or die $graph->error;

Не работает :( Но не сдаваться! Проблема в том, что модуль хочет получить латиницу в виде десятичных значений символов в Unicode. Сделать это поможет простенькое преобразование:

sub stringToDec{
my $ustring = '';
for my $char (split //, shift){
if(ord($char)>127){
$ustring .= "&#" . (unpack("U", $char)+848) . ";";
}else{
$ustring .= $char;
}
}
return $ustring;
}
 

теперь делаем так:

$graph->set_x_label_font('/data/fonts/arial.ttf', 12);# здесь мы указали, где лежит фонт и его размер
$graph->set( ...
x_label => stringToDec('дни'),
...
) or die $graph->error;
 

...и о чудо, мы видим рашн лэнгвэдж )))

Рубрики: Perl

↑ Наверх


blog comments powered by Disqus

Контакты

Igor Zinkovsky aka TLoD,Snake. Писать на электропочту, стучаться в аську 302380533, искать в Санкт-Петербурге.

© 2002-2019