Создание сайтов с возможностью печати PDF на примере PDF::AP

Хотелось бы рассмотреть преимущества формата PDF (Portable Document Format), разработанного компанией Sun Microsystems, а также где и почему стоит использовать формат PDF при создании сайтов.
Пожалуй, вам несколько раз встречалась необходимость печати документов прямо из Интернета. Это могут быть счета, квитанции, данные для печати на шаблоне.
Возможно, вам также приходилось встречаться с особенностями печати подобных документов, оформленных в виде HTML кода напрямую из Internet Explorer. Если всё же не приходилось – обязательно придётся в ближайшем будущем. Суть этих особенностей заключается в том, что этот броузер, несмотря на то, что является самым распространенным на момент написания статьи, не умеет корректно печатать web-страницы. Информация на распечатанной странице начинает странным образом съезжать, фон и другое оформление куда-то изчезает, а часть страницы может быть вообще обрезана. Как вы понимаете, подобные вещи непозволительны, когда необходимо предоставить пользователю возможность распечатать документ, с которым он пойдет в банк.
Ситуация осложняется еще больше, когда необходимо распечатать некий документ на заранее подготовленном шаблоне. Конечно, заранее подготовленные шаблоны редко используются на классических веб-сайтах, однако создание сайтов не ограничивается созданием HTML-страниц. Сайтом может быть внутрикорпоративный портал, B2B-система, рабочее место оператора в конце концов.
Поскольку практически у каждого рядового пользователя на компьютере установлен Adobe Acrobat Reader или подобный, можно с уверенностью заявить, что документы, оформленные в формате PDF, прочитать не составит возможности.
Так в чём же преимущества формата PDF? Перечислить все их мне, например, не представляется возможным, поэтому постараюсь упомянуть об основных. Прежде всего, как уже говорилось выше, формат PDF гарантирует, что документ будет распечатан в точности так, как он выглядит на экране пользователя. Во-вторых, любой, абсолютно любой принтер распечатает документ с теми отступами и позиционированием, какое вы зададите в сгенерированном файле PDF, а не в соответствии с зашитыми в принтер настройками. Помимо этого, некоторые действия над PDF (например, изменение) могут быть защищены паролем. Ко всему прочему, существенно упрощается генерация многостраничных документов. Те, кто занимался этим и использовал HTML понимают, что не так уж просто заставить разрываться страницы имеено там, где вам нужно. Как видите, преимуществ использования PDF перед обычным HTML более, чем достаточно..

Как вас зовут:
Напишите свои комментарии к статье:

Теперь, когда разобраны основные преимущества создания сайтов с использованием системы печати документов в формате PDF, попробуем разобрать пример с использованием Perl и PDF::API2.
Будем считать, что установленный и сконфигурированный web-сервер, например, Apache, а также Perl вы под рукой уже имеете.
Первым делом, нужно установить модуль PDF::API2 для Perl, если вы еще не сделали этого. Сделать это необычайно просто. Просто выполните следующую команду из под пользователя Root:

1. perl -e shell -MCPAN

Возможно, если вы раньше не пользовались CPAN, необходимо будет ответить на несколько вопросов, чтобы инициализировать интсаллятор. В большинстве случаев достаточно ответить «no» на первый же вопрос «Are you ready for manual configuration?»
После того, как настроите CPAN, вы попадёте в оболочку CPAN, перед вами будет примерно следующее:

cpan shell — CPAN exploration and modules installation (v1.7602)
ReadLine support available (try ‘install Bundle::CPAN’)

cpan>

Наберите команду install PDF::API2 и подождите, пока всё установится. Если возникнут проблемы, можно воспользоваться исходным кодом PDF::API2, расположенным на search.cpan.org.
После установки PDF::API2, выйдите из устанощика CPAN, набрав
exit
Проверить, всё ли установилось так, как надо, можно набрав в консоли:
perl -e ‘use PDF::API2′
Если после ввода указанной команды не последовало никакого вывода, значит всё хорошо.
Я бы также посоветовал установить модуль XML::Simple. Сделать это можно аналогично установке PDF::API2. Этот модуль позволит нам создавать XML файлы с конфигурацией печати документов в PDF.
Итак, мы имеем установленный PDF::API2 и можем начинать заниматься созданием сайтов с использованием указанного модуля и генерировать PDF файлы налету.
Создайте файл PrintPDF.pm и запишите в него следующее:

package PrintPDF;

use strict;
use XML::Simple;
use PDF::API2;

sub PrintPDF {
my $blobref = shift;
my $configref = shift;
my $hashref = shift;
}

1;

Мы создали новый модуль Perl, который имеет одну единственную функцию PrintPDF и принимает параметры: ссылку на переменную, содержащую бинарный код шаблона PDF, на котором будем печатать, ссылку на переменную содержащую XML код конфигурационного файла и ссылку на хэш, значения которого будут использоваться при печати на шаблоне.
Дополним функцию PrintPDF:

sub PrintPDF {
my $blobref = shift;
my $configref = shift;
my $hashref = shift;

my $pdf;
if (scalar $blobref=~m!^PDF::API2=HASH!) {
$pdf = $blobref;
} else {
$pdf = PDF::API2->openScalar($$blobref) or die $!;
}

my $fnt_orig = $pdf->corefont(‘Verdana’, -encode=>’windows-1251′);
my $size_orig = 7;
my ($fnt, $size, $color, $align);
my $xml = XMLin($$configref, ForceArray=>1);
return $pdf;
}

Теперь наша функция, помимо того, что принимает параметры, делает еще и следующие вещи:

  1. инициализирует объект PDF::API2, записывая копию объекта в $pdf
  2. может получать в качестве входного параметра не только ссылку на бинарный код шаблона, но и уже готовый, созданный объект PDF::API2
  3. задаёт значения по умолчанию: шрифт, размер, кодировку, цвет и выравнивание
  4. считывает в память конфигурационный XML файл

Следующим этапом, самым сложным будет обработка XML конфигурационного файла и печать данных:

sub PrintPDF {
my $blobref = shift;
my $configref = shift;
my $hashref = shift;

my $pdf;
if (scalar $blobref=~m!^PDF::API2=HASH!) {
$pdf = $blobref;
} else {
$pdf = PDF::API2->openScalar($$blobref) or die $!;
}

my $fnt_orig = $pdf->corefont(‘Verdana’, -encode=>’windows-1251′);
my $size_orig = 7;
my ($fnt, $size, $color, $align);
my $xml = XMLin($$configref, ForceArray=>1);

foreach my $page(@{$xml->{page}}) {
my $pdfpage = $pdf->openpage(${$page->{id}}[0]) or next;
my $gfx = $pdfpage -> gfx();
foreach my $label(@{$page->{label}}) {
my $text;
my $x = $label->{x};
my $y = $label->{y};
if (defined $label->{font}) {
$fnt = $pdf->corefont(${$label->{font}}[0], -encode=>’windows-1251′);
} else {
$fnt = $fnt_orig;
}

if (defined $label->{size}) {
$size = ${$label->{size}}[0];
} else {
$size = $size_orig;
}

if (defined $label->{color}) {
$color = ${$label->{color}}[0]
} else {
$color = ‘black’;
}

if (defined $label->{align}) {
$align = ${$label->{align}}[0];
} else {
$align = ‘left’;
}

foreach my $type(@{$label->{type}}) {
my $key = $type->{value};
my $current = $hashref->{$type->{value}};
$text .= $current.’ ‘ if $current;

}
$gfx->textlabel($label->{x},
$label->{y},
$fnt, $size,
$text, -color=>$color, -align=>$align
)
}
}
return $pdf;
}

Давайте разбираться, что же здесь происходит. А происходит очень простая вещь: выполняется цикл для каждой страницы, описанной в XML файле. Для каждой страницы выполняются следующие действия:

  1. открывается запрошенная страница в PDF-шаблоне
  2. считываются параметры запрошенной текстовой метки (шрифт, размер, цвет, выравнивание, координаты) и при необходимости становятся эквивалентными заданным по-умолчанию чуть выше
  3. каждая текстовая метка может состоять из нескольких полей, каждое из которых будет разделено пробелом
  4. считывается значение для каждого поля и записывается в переменную $text
  5. в pdf шаблоне размещается текстовая метка с заданными параметрами

После выполнения указанного цикла получаем сгенерированный PDF файл, который правда хранится пока в виде объекта в переменной $pdf.
Как вы понимаете, еще одним необходимым этапом является создание PDF-шаблона и конфигурационного файла. В качестве шаблона будем использовать пустой PDF-шаблон размера А4.
А вот пример XML-файла, содержимое которого необходимо будет передать нашей функции:
Обратите внимание, что точка (0,0) в координатной плоскости PDF файла находится в нижнем левом углу, а не верхнем левом.

1

30
center

20
center

10

10

Последнее, что нам необходимо сделать, чтобы наконец сгенерировать PDF – написать небольшое обращение к нашему модулю PrintPDF.pm. Для этого создайте файл PrintPDF.pl и запишите в него следующее:

#!/usr/bin/perl

use strict;
use PrintPDF;
use CGI qw (param);

my $hashref = {};
$hashref->{name} = param(‘name’);
$hashref->{text} = param(‘text’);
if ($hashref->{name}=~m![уеэёоаяию]$!) {
$hashref->{prefix} = ‘Уважаемая’;
} else {
$hashref->{prefix} = ‘Уважаемый’;
}

my ($xml, $blob);
open(HANDLE, ‘config.xml’) or die $!;
$xml = join(», );
close HANDLE;

open(HANDLE, ‘blank.pdf’) or die $!;
$blob = join(», >HANDLEstringify();

В тот же каталог кладём файлы config.xml и blank.pdf, рисуем для этого файла форму подобную нижеследующей и смотрим, как же это здорово – печатать документы в PDF.

Как вас зовут:
Напишите свои комментарии к статье:

В процессе экспериментирования, вам возможно понадобится:

  • $pdf->importpage($pdf, $source_page, $new_page)копирует страницу номер $source_page в страницу с номером $new_page в документе $pdf
  • my $gif = $pdf->image_gif($image_path);$gfx->image($gif, $width, $height);а так можно вставить gif на страницу

Поделиться в соц. сетях

mailru Создание сайтов с возможностью печати PDF на примере PDF::AP
facebook Создание сайтов с возможностью печати PDF на примере PDF::AP
odnoklassniki Создание сайтов с возможностью печати PDF на примере PDF::AP
livejournal Создание сайтов с возможностью печати PDF на примере PDF::AP
googlebuzz Создание сайтов с возможностью печати PDF на примере PDF::AP

Также рекомендуем:

  1. Как подружить интерпретатор Perl с Homesite В каких только редакторах не пишут люди программы на Perl.. Мы же любим Homesite и поговорим об этом замечательном редакторе. Главным недостатком Homesite в контексте программирования на Perl является отсутствие встроенного интерпретатора perl. Однако ничто не мешает нам связать родной интерпретатор perl с Homesite. У нас есть два пути: 1. Вынести кнопку, запускающую интерпретатор perl [...]...
  2. MySQL – это просто! Сначала ответим на вопрос – что такое MySQL? Это База Данных (БД), в которой структурировано хранятся данные. Следует второй вопрос – зачем отказываться от простых и удобных файлов к сложной БД? Потому что файлы, генерируемые каким либо скриптом на основе файловой БД (гостевые книги, CMS, форумы), постепенно начинают увеличиваться в размере, а так же их [...]...
  3. Текст из воды Step 1Создайте документ и напишите любой текст. Растеризуйте слой.. Используя кисть, добавьте несколько капель и подтеков к тексту. Объедините оба слоя Layer > Flatten Image. Step 2Идем в палитру каналов и создаем маску канала путем перетаскивания любого слоя Red, Green или Blue на иконку New Channel внизу палитры каналов. Называем его water. Далее инвертируем канал [...]...
  4. Лист бумаги Часть первая. 1. Создаем новый документ, называем Paper. 2. Выбираем Rectangular Marquee Tool (М) 3.Выделим весь лист. 4. Выделенное заполняем белым. 5. Заходим Layer>Layer Style>Drop Shadow-Opacity 20%-Distance 2-Spread 0 -Size 1 6. Нажимаем на Stroke.-Size 1px -Outside -Opacity 5% (Внимание! Для каждого размера листа, свои опции!) 7. Выбираем Elliptical Marquee Tool (M) 8. Зажимаем Shift [...]...
  5. tmp профессиональный дизайн; регистрация домена .RU на 1 год; наполнение до 10 страниц сайта; блок новостей; прайс-лист; форма заказа с сайта; регистрация в поисковых системах; счетчик посещений; срок изготовления 3-5 дней. акция 3990=...
  6. Смешивание слоев при помощи маски прозрачности Вот попыталась перевести урок, если, что не вышло, не судите строго.С помощью этого урока Вы научитесь комбинировать области различных слоев и создавать композитное изображение.. 1. Откройте в Illustrator изображение, состоящее хотя бы из 2-х слоев. В данном случае картинка состоит из слоя с розовой розой (верхний слой) и желтой (нижний) 2. С помощью пера или [...]...
  7. Ucoz web service. Как это было… ПРЕЛЮДИЯ Жил был один молодой парень, который даже не слышал о компьютерах и не мог понять, что это такое. Впервые ему удалось лицезреть его в 10лет. Решив удивить своих друзей и преподавателя, он радостно сказал : я знаю что ЭТО… Осциллограф! Но не было в этом моей вины, вы убедитесь в этом увидев ЭВМ «Электрон».. [...]...
  8. Трехмерные здания 1. Инструментом Rectangle Tool (F6) нарисуйте три прямоугольника. Для удобства работы с ними залейте каждый разным оттенком.. 2. Сгруппируйте объекты (выделите их и нажмите ctrl+G). Примените перспективу: Effects > Add Perspective. 3. Чтобы сделать здания разной высоты, разгруппируйте объекты и передвиньте прямоугольники вверх или вниз в зависимости от того, ниже или выше здание вы хотите [...]...
  9. Для тех, кто хочет больше,чем HTML Для тех, кто хочет самостоятельно научиться локально делать сайты, программировать, используя языки: php, sgi, да еще с поддержкой базы данных (mysql). Все это Вы сможете, если установите локальный сервер на своим компъютере. . В этой статье я не даю подробных инструкций и комментариев, так как это получится целый талмуд. Я сам не супер-мупер пользователь, да [...]...
  10. Яндекс запустил RTFM для программистов Яндексом запущен специальный колдунщик для программистов, аналог RTFM. Сообщение об этом распространили разработчики Яндекса. Новый сервис будет показывать ответ на интересующий вопрос непосредственно в поисковой выдаче, облегчая тем самым работу программистам.. Колдунщик предоставляет описания, которые имеются в официальных справочных материалах или действующих руководствах по программированию. Колдунщик уже знает более чем десятью популярными языками программирования и [...]...
  11. Узоры, работа с Blending tool 1. Инструментом Polygon tool (Y) нарисуйте равносторонний пятиугольник, удерживая ctrl.. 2. Продублировав его (Ctrl+D), потяните инструментом Shape tool (F10) за любой узел между вершинами. Затем выделите обе фигуры и отцентрируйте их (Arrange > Align and Distribute). Придайте фигурам обводку разного цвета. 3. Выберите Interactive blend tool и потяните курсором от одного объекта к другому. 4. [...]...
  12. Как нарисовать резьбу. Когда речь заходит о рисовании реалистичной резьбы для иллюстрации или технического чертежа, многие просто не знают, с какой формы начать и как должна выглядеть тень. В этом уроке я расскажу вам о базовой технике создания резьбы вокруг любого цилиндрического объекта.. 1. Для создания одного витка спирали вам нужно будет объединить три базовых примитива – прямоугольник [...]...
  13. Обнаружение фальшивого PR при покупке ссылок Скупой платит дважды При покупке ссылок, а так же при обмене, любой SEO специалист, особенно человек, совсем недавно занявшийся SEO, должен быть по крайне мере достаточно осторожным. Используя совершенно простые советы в этой статье, Вы сможете избежать ошибок, которые против Вас могут использовать не совсем порядочные SEO мастера. . И так покупка или обмен ссылками [...]...
  14. Переплетающиеся кольца Не так давно один из посетителей сайта спросил меня, как создать переплетающиеся кольца наподобие эмблемы Олимпийских Игр. Его просьба была реализована в Corel DRAW8, однако я не мог остановиться на достигнутом, поэтому здесь я познакомлю вас с вариантом того же урока для Corel DRAW9. Различие между уроками в том, что здесь были использованы Artistic Media [...]...
  15. К четырехлетию «В Контакте» приготовил несколько новинок Социальная сеть «В Контакте» отметила свой четвертый день рождения 10 октября сразу несколькими полезными новинками. Анонс этих функций был представлен в официальном блоге сервиса.. В первую очередь нововведения коснулись микроблогов, представленных 1 августа. Теперь в них имеется возможность не только оставлять комментарии к статусам друзей, но и оставлять отметку «Мне нравится» для понравившихся статусов, или [...]...

Комментарии запрещены.