use CGI qw/:standard/; # применим библиотеку CGI
use SVG; # и SVG
my $p = CGI->new; # создадим объект CGI и зададим
print $p->header(-type=>'image/svg+xml'); # тип документа
# создадим объект SVG размером 400 на 300 пикселей
my $svg= SVG->new(width=>400, height=>300);
# разместим синий текст, начиная с координат 32,32
$svg->text(x=>32,y=>32,
style=>"font-size:15;fill:blue"
)->cdata('Посещаемость сайта: распределение по доменам');
# вызовем подпрограмму для размещения 4-х полос графика
bar(20, 50, 'red', 55, '.RU');
bar(20, 80, 'blue', 24, '.COM');
bar(20, 110, 'green', 12, '.ORG');
bar(20, 140, 'black', 9, 'прочие');
# разместим текст с версиями программных средств:
$svg->text(x=>12,y=>200,
)->cdata("Perl $] + ". # версия Perl
"SVG.pm $SVG::VERSION + ". # версия модуля SVG
"CGI.pm $CGI::VERSION"); # версия модуля CGI
my $out = $svg->xmlify(); # отформатируем текст XML
print $out; # и отправим его браузеру
sub bar { # подпрограмма вывода одной строки графика,
# которой передаются координаты, цвет, % и заголовок
my ($x, $y, $color, $procent, $caption) = @_;
# выводим прямоугольник пропорционально проценту
$svg->rectangle(
x => $x, y => $y,
height => 30, width => $procent*10,
style => "opacity:1; fill:$color; fill-opacity:0.4"
);
# и пояснительный текст указанного цвета
$svg->text(
x=>$x+5,y=>$y+20,style=>"font-size:15;fill:$color"
)->cdata("$caption $procent %");
}
SVG-документ, сформированный в результате выполнения этой программы, - это текстовый файл в формате XML, который выглядит следующим образом:
Зная синтаксис описания SVG-графики, можно сформировать подобный документ c помощью одного из модулей Perl, генерирующих документы XML. Библиотека SVG лишь предоставляет для этого наиболее удобные средства. Если нет под рукою нужных модулей, можно даже создавать любые документы XML на чистом Perl. Текстовое представление, понятное человеку и легкое для обработки, стало одним из преимуществ XML по сравнению с применявшимися ранее двоичными форматами. На рис. 18.3 показано, как сформированный в программе SVG-документ выглядит в окне браузера в виде векторного изображения.
Рис. 18.3. Динамически сформированная SVG-графика
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии