-
Название и версия
-
Используемая терминология
-
Руководство
-
Преимущества формата PDF
-
Основные принципы работы с PDF-документами через PDF::API2
-
Создание PDF-документа
-
Открытие существующего документа PDF для редактирования,
импортирование данных
-
Работа с текстовыми данными
-
Управление шрифтами при создании PDF-документа
-
Работа с цветом
-
Добавление текста
-
Графические данные в PDF - документе
-
Вставка графических изображений в PDF - документ
-
Импортирование PDF - документов
-
Создание графических изображений средствами PDF::API2
-
Вывод PDF-документа пользователю, сохранение документа
-
Приложение к руководству
-
Примеры кода
-
Полезные ссылки
Название и версия
Данное руководство создавалось для PDF::API2 версии 20020226.221611 .
Соответственно, описываемые методы в других версиях модуля могут
работать не корректно или не работать совсем. Данное руководство не
претендует на полноту и точность изложения описания работы с модулем
PDF::API2 для Perl. Скорее, оно является неким обзорным материалом,
который предназначен помочь программистам Perl в практической работе,
при создании PDF-документов.
Когда у меня возникла необходимость в предоставлении пользователю
документов в формате PDF, и использовании модуля PDF::API2,
обнаружилось, что русскоязычный интернет содержит крайне мало информации
на данную тему. Возможно, составленное
руководство сможет частично восполнить этот пробел. Кроме того, в
тексте приводятся ссылки на полезную информацию, которой мне не хватало
для решения поставленной задачи.
Используемая терминология
API (Application Programming Interface) - "Интерфейс
прикладного программирования" - набор ("библиотека") стандартных
процедур, программных прерываний, вызовов, форматов данных и других
средств, которые должны использовать прикладные программы для реализации
своих функций.
PDF (Portable Document Format) - метафайловый формат,
предложенный фирмой Adobe для графических файлов (векторных и
растровых), содержащих иллюстрации и текст с большим набором шрифтов и
гипертекстовыми ссылками с целью передачи их по сети в сжатом виде.
Версия PDF3 позволяет сохранять все установки для выводного устройства,
записанные в файле формата PostScript. Восстановление формата PDF из
формата PostScript производится с использованием опции Exchange. Этим
обеспечивается оперативная возможность передачи графических файлов по
электронной почте. PDF позволяет не заботиться о наличии необходимых
шрифтов у адресата, поскольку они подгружаются непосредственно в файл.
Особенностью формата является также возможность использования различных
способов сжатия для разных типов объектов. Для работы с форматом PDF
фирма Adobe выпустила пакет программ Acrobat. Входящий в этот пакет
Acrobat Distiller переводит в PDF PostScript-файлы, Acrobat Exchange
позволяет их редактировать (устанавливать внутренние ссылки, ссылки на
внешние звуковые и видеофайлы, Web-ссылки и т.д.). Существует и ряд
других графических редакторов, позволяющих создавать файлы в формате
PDF.
Бесплатно распространяемую утилиту Adobe Acrobat Reader, которая
позволяет читать документы и распечатывать их на принтере (однако не
дает возможности создавать или изменять их) можно получить по адресу:
www. adobe.com/acrobat. Файлы PDF используют расширение *.pdf. Версия
формата PDF/A прошла сертификацию стандартом архивирования ISO [584-586,
959, 1640].
Источник: (словари
Яндекса)
Руководство
1. Преимущества формата PDF
Основные преимущества:
- Кроссплатформенность. Просмотр PDF-файлов возможен практически
на всех самых распространенных платформах, с помощью бесплатной
программы Acrobat Reader.
- Независимость от наличия (отсутствия) шрифтов на компьютере
пользователя. Шрифты, как и другие данные, при создании встраиваются
в PDF-документ.
- Независимость от настроек принтера.
- Полное соответствие внешнего вида PDF-документа на экране
компьютера и распечатанного на принтере. Данное преимущество имеет
особенно большое значение при печати финансовых и юридических
документов.
- Небольшой размер PDF-файлов.
- Криптозащита, шифрование файлов, управление доступом. PDF-формат
позволяет устанавливать ограничения на просмотр, редактирование и
печать документа. Возможна защита этих действий паролем.
Еще одно преимущество, актуальное при использовании PDF-документов в
интернете:
- Простота генерации многостраничных документов (данная
возможность с трудом реализуется для обычных html-документов, и
поддерживается ограниченным числом браузеров)
2 Основные принципы работы с PDF-документами через PDF::API2
Модуль PDF::API2 не дает возможностей для редактирования существующих
pdf-документов, с поиском в них текста, рисунков и их последующей
заменой. В основном, он предназначен для создания новых документов.
Основные типы объектов, которые могут использоваться на странице
PDF-документа: контуры (path object), текст (text object) и растр (image
object). Для описания объектов используется язык, по функциям
аналогичный PostScript.
Система координат является двумерной, и имеет начало в левом нижнем углу
листа. Ось X направлена вправо, ось Y - вверх. Единицей измерения
является 1/72 дюйма. Геометрическая плоскость, на которой расположена
система координат - бесконечна. Ограничение документа происходит с
помощью указания физических границ страницы (MediaBox). Также можно
задать страницам документа границы видимой области (CropBox).
3 Создание документа PDF
Подключаем модуль PDF::API2
3: use PDF::API2;
Создаем новый объект PDF::API2 - документ в формате PDF. Каждый
созданный объект позволяет работать только с одним документом
10: my $pdf = PDF::API2->new;
При вызове $pdf->page($page)
происходит создание новой страницы PDF-документа. По умолчанию, новая
страница добавляется в конец документа. Для добавления страницы в
середину документа или в начало, нужно указать номер создаваемой
страницы.
Если указать в качестве номера "-1" - страница будет вставлена перед
последней страницей. Если $page =
1; вставка будет производиться в начало документа, перед первой
страницей.
11: my $page = $pdf->page();
MediaBox определяет границы
физической страницы. CropBox
- границы видимой области. Если параметры
CropBox не указаны, он
принимается равным MediaBox.
CropBox лучше задавать с помощью 4х параметров:
$page->cropbox($llx, $lly, $urx,
$ury);. С помощью CropBox
удобно задавать поля страницы.
12: $page->mediabox($w,$h);
13: #$page->bleedbox($w,$h);
14: #$page->cropbox($w,$h);
15: #$page->artbox($w,$h);
4 Открытие существующего документа PDF для редактирования,
импортирование данных
Иногда возникает необходимость предоставить клиенту заполненную
квитанцию, бланк и т.д. В подобных ситуациях будет проще не создавать
квитанцию с нуля, а просто открыть готовый документ и добавить в него
нужную информацию.
$pdf =
PDF::API2->YzyX($FILE_NAME); - открывает существующий
PDF-документ для редактирования. Стоит отметить, что PDF::API2 не
предоставляет возможность отредактировать содержащиеся в документе
данные. Можно только дополнить файл новой информацией.
$page =
$pdf->openpage($page_number); - создает объект для редактирования
страницы с номером $page_number
открытого ранее документа.
8: my $pdf =
PDF::API2->YzyX("helloworld.pdf");
9: my $page = $pdf->openpage(1);
Можно также создать новый документ и импортировать в него страницу(ы) из
созданного ранее документа.
$pageobj =
$pdf->importpage($sourcepdf, $sourceindex, $targetindex) -
импортирует страницу с номером
$sourceindex из документа
$sourcepdf, на место страницы с номером
$targetindex в текущий
документ.
Если $sourceindex или $targetindex принимают значение "-1" или "0" -
будут производиться операции
с последней страницей документа.
5: my $import_pdf =
PDF::API2->YzyX("helloworld.pdf");
6: my $pdf = PDF::API2->new;
7:
8: my $page = $pdf->importpage($import_pdf, 1, 1);
Еще один вариант импортирования страниц из строннего PDF-документа
описан в п.6.2.
данного руководства.
5 Работа с текстовыми данными
5.1 Управление шрифтами при создании PDF-документа
Как уже было сказано, все объявленные (даже если шрифт не использовался)
при создании PDF-документа шрифты, во время сохранения будут подгружены
непосредственно в файл.
14: my $font_ps =
$pdf->psfont("timesbd8.pfb","timesbd8.afm");
15: # my $font_tt = $pdf->ttfont(`verdana.ttf`);
16: # my $font_cf = $pdf->corefont(`Helvetica`);
PDF::API2 позволяет работать со шрифтами типа:
- corefont - набор основных шрифтов, которые
Adobe позволяет разработчикам
использовать бесплатно.
В эту группу также входят некоторые шрифты от компании Microsoft.
Шрифты предоставляются модулем
PDF::API2, и не требуют дополнительной установки.
- psfont - шрифты Post Script.
Дополнительная информация (Источник:
http://www.paratype.ru):
Язык программирования PostScript был разработан фирмой Adobe Systems
для описания сложных графические объектов. За неимением реальных
альтернатив в 80-90-х годах язык PostScript широко использовался при
подготовке печатных изданий, и его интерпретаторы были встроены во
многие принтеры и устройства отображения графической информации.
Хотя этот формат и основывается на использовании языка PostScript
для описания печатной страницы документа, он не требует для печати
обязательного применения принтеров семейства PostScript. При
использовании принтеров PostScript шрифт просто загружается в память
принтера, а применение обычных принтеров требует выполнения операции
растрирования шрифта (то есть преобразования в набор отдельных
точек) и последующей посылки на принтер растрового образа страницы.
Наиболее известная и распространенная сегодня реализация языка
PostScript - формат документов PDF, поддерживаемый продуктами серии
Acrobat. Почти что все, что может быть сделано в PostScript может
быть реализовано в PDF.
Когда мы говорим шрифты PostScript, мы обычно имеем ввиду шрифты
PostScript Type 1. Это общепринятый стандарт для цифровых шрифтов
(ISO 9541). Шрифт формата Type 1 - специальная форма программы
PostScript и особый формат файла, который ориентирован на описание
шрифта. В языке PostScript существуют и другие стандарты описания
шрифтов - Type 0, Type 2, Type 3, ..., однако сейчас они почти не
используются или используются для специальных целей. В последние
годы язык PostScript был расширен, чтобы обеспечить поддержку
шрифтовых возможностей стандартов TrueType и OpenType. Новые
устройства с языком Adobe PostScript сейчас поддерживают все 3
шрифтовых стандарта.
Шрифт PostScript состоит из нескольких файлов: Шрифт PostScript для
Windows может состоять из 2-х, 3-х или 4-х файлов. Набор из 3 файлов
состоит из файла с расширением PFB (Print Font Binary), который
содержит информацию о контурах; файла с расширением AFM (Adobe Font
Metrics), содержащего информацию о ширинах символов и кернинге; INF
файла, содержащего дополнительную информацию, которая требуется для
инсталляции. В процессе инсталляции Windows генерирует PFM файл
(Print Font Metrics), в основе которого лежит информация из AFM и
INF файлов. Далее используется только PFB и PFM файлы. Некоторые
производители генерируют PFM файлы самостоятельно и поставляют своим
клиентам только два этих файла. Этого достаточно для нормального
использования. Некоторые так же добавляют AFM файлы, а некоторые
поставляют все 4 файла.
Шрифт PostScript для Macintosh состоит из файла-чемодана (suitcase)
и принтерного файла. Если вы купили гарнитуру, а не одно начертание,
то у вас может быть один чемодан на всю семью и несколько принтерных
файлов, по одному для каждого начертания - Нормального (Regular),
Курсивного (Italic), Жирного (Bold) и Жирного Курсивного (Bold
Italic). Другой подход предполагает комплектацию каждого начертания
отдельным файлом-чемоданом. В этом случае семья из 4 шрифтов будет
состоять из 8 файлов. Гарнитуры могут поставляться с "совмещенными
начертаниями" или с "разделенными начертаниями". Одна гарнитура
может содержать до 4 начертаний, но иногда она содержит только
Нормальное и Жирное, или Нормальное и Курсивное начертание.
- ttfont - шрифты TrueType.
Дополнительная информация (Источник:
http://www.paratype.ru):
Шрифты TrueType были придуманы специалистами компании Apple Computer
в ходе конкурентной борьбы с технологией PostScript. Позднее
лицензия на шрифты TrueType была приобретена фирмой Microsoft с
целью включения их в свои операционные системы. В отличие от шрифтов
PostScript, шрифты TrueType не используют специального языка для
описания формата печатной страницы. Шрифты TrueType могут содержать
до 65000 символов, расположенных в порядке, определенном стандартом
Unicode. В действительности, не все шрифты содержат расширенные
наборы символов, большинство европейских изготовителей
ограничиваются стандартной комплектацией западноевропейской
кодировки (т.н. Latin 1).
Шрифт в формате TrueType - это один файл. В системе Windows он имеет
расширение TTF, а в Mac OS это файл-чемодан (suitcase) с ресурсом
SFNT. В Mac OS X встроен шрифтовой процессор нового поколения,
который кроме шрифтов с ресурсом SFNT, поддерживает и файлы TTF,
созданные для Windows. Так что файл с расширением TTF можно
использовать на обеих операционных платформах.
Особенности $pdf->ttfont
Не смотря на то, что шрифты по-умолчанию подгружаются в файл документа,
это условие не является обязательным.
$font = $pdf->ttfont($ttfile,
$lazy);
При стандартном использовании переменная
$lazy, как правило,
опускается. Однако, если установить ей значение, равное "1" - указанный
в $pdf->ttfont($ttfile, $lazy)
шрифт не будет встроен в pdf-документ.
Преимущества данного подхода:
- т.к. шрифт не встраивается, соответственно размер файла
конечного PDF-документа уменьшается
- программисту нет необходимости беспокоиться о поиске (покупке)
необходимых шрифтов, запоминании их месторасположения, названий и
т.п. Достаточно использовать стандартные обозначения шрифтов:
- arial arialbold
arialitalic arialbolditalic arialblack
- comicsansms
comicsansmsbold
- couriernew
couriernewbold couriernewitalic couriernewbolditalic
- tahoma tahomabold
- timesnewroman
timesnewromanbold timesnewromanitalic timesnewromanbolditalic
- verdana verdanabold
verdanaitalic verdanabolditalic
- wingdings
- Дополнительное удобство для пользователей Acrobat Reader версии
5 и старше: возможен поиск и замена шрифтов.
Недостатки:
- Созданный подобным образом документ, смогут прочитать только
пользователи Windows OC.
- Возможно, что ОС клиента не поддерживает русский (или любой
другой, отличный от английского) язык и отображение русскоязычных
документов будет происходит в искаженном виде.
5.2 Работа с цветом
(Вспомогательный источник:
http://search.cpan.org/~areibens/PDF-API…
PDF/API2/Lite.pm)
Задаем цвет текста. По умолчанию используется черный.
22: $txt->fillcolor(`blue`);
PDF::API2 позволяет использовать для определения цвета шрифта различные
форматы. Самый простой вариант - указать наименование цвета.
Возможно использование следующих наименований:
aliceblue, antiquewhite, aqua,
aquamarine, azure, beige, bisque, black, blanchedalmond,
blue, blueviolet, brown, burlywood, cadetblue, chartreuse, chocolate,
coral, cornflowerblue,
cornsilk, crimson, cyan, darkblue, darkcyan, darkgoldenrod, darkgray,
darkgreen, darkgrey,
darkkhaki, darkmagenta, darkolivegreen, darkorange, darkorchid, darkred,
darksalmon,
darkseagreen, darkslateblue, darkslategray, darkslategrey,
darkturquoise, darkviolet,
deeppink, deepskyblue, dimgray, dimgrey, dodgerblue, firebrick,
floralwhite, forestgreen,
fuchsia, gainsboro, ghostwhite, gold, goldenrod, gray, grey, green,
greenyellow, honeydew,
hotpink, indianred, indigo, ivory, khaki, lavender, lavenderblush,
lawngreen, lemonchiffon,
lightblue, lightcoral, lightcyan, lightgoldenrodyellow, lightgray,
lightgreen, lightgrey,
lightpink, lightsalmon, lightseagreen, lightskyblue, lightslategray,
lightslategrey,
lightsteelblue, lightyellow, lime, limegreen, linen, magenta, maroon,
mediumaquamarine,
mediumblue, mediumorchid, mediumpurple, mediumseagreen, mediumslateblue,
mediumspringgreen,
mediumturquoise, mediumvioletred, midnightblue, mintcream, mistyrose,
moccasin, navajowhite,
navy, oldlace, olive, olivedrab, orange, orangered, orchid,
palegoldenrod, palegreen,
paleturquoise, palevioletred, papayawhip, peachpuff, peru, pink, plum,
powderblue, purple,
red, rosybrown, royalblue, saddlebrown, salmon, sandybrown, seagreen,
seashell, sienna,
silver, skyblue, slateblue, slategray, slategrey, snow, springgreen,
steelblue, tan, teal,
thistle, tomato, turquoise, violet, wheat, white, whitesmoke, yellow,
yellowgreen
Определение цвета в формате RGB:
22: $txt->fillcolor(`#FF0000`);
Определение цвета в формате CMYK (cyan, magenta, yellow, black):
22: $txt->fillcolor(`%50009900`);
Задание цвета для начертания линий или заливки цветом графического
объекта происходит аналогичным образом.
26: $gfx->fillcolor(`blue`);
41: $line->strokecolor(`blue`);
5.3 Добавление текста
PDF-файлы выстраивают "снизу вверх". Элементы (текст, картинки, линии и
т.д.), добавленные позднее, будут перекрывать собой элементы
опубликованные ранее. Так, если мы сначала добавим в документ текстовую
строку, а потом нарисуем в той же области большой прямоугольник - строка
окажется под прямоугольником и не будет видна, либо видна только
частично.
18: my $txt=$page->text;
Выбираем шрифт для вывода текста, и определяем его размер:
19: $txt->font($font_tnr,10);
Можно задать межсимвольный интервал и интервал между словами:
20: $txt->charspace(0.6);
21: $txt->wordspace(2);
Указываем координаты для размещения текста, отступ от левого и нижнего
краев страницы.
23: $txt->translate($x,$y);
Выводим текст.
24: $txt->text("Hello world!");
Для вывода и одновременного выравнивания текста по правому краю
страницы, можно использовать
$txt->text_right($row);
Выравнивание по центру:
$txt->text_center($row);
Удобна для использования функция
textln. Она позволяет выводить на печать массив строк. Отступы
между строками реализуются использованием:
$txt->lead(14); - каждая
новая строка начинается на 14 px ниже предыдущей. Использование
отрицательного значения для lead
(например, $txt->lead(-14);)
приводит к выводу строк таким образом, что каждая следующая строка
располагается выше предыдущей на 14px.
26: $txt->lead(14);
27: $txt->textln(@row_txt);
Однако, несмотря на удобство, метод
textln (как и text), имеет
недостаток: отсутствие автоматического переноса строк, по достижении ими
границ документа. Слишком длинная строка может выйти за границы
документа. Чтобы этого избежать, рекомендуется использование функции
paragraph.
Рaragraph - выводит текст в
виде абзаца, при необходимости выполняя автоматический перенос строк, и
возвращает $t - отступ от левой границы обозначенного текстового блока в
px, позиция вывода последнего символа абзаца; $y2 - позиция курсора
относительно вертикальной оси координат на момент окончания вывода
текста в px. Текстовые данные функции следует передавать в виде массива
слов.
28: my @text = qw(This is
functionally the same as the one above, but far less
29: resource-intensive, if you use many pages (possible the same) from
one single pdf);
31: my
($t,$y2)=$txt->paragraph($x,$y,$paragraph_width,$paragraph_height,$string_height,@text);
25: $txt->compress();
6 Графические данные в PDF - документе
6.1 Вставка графических изображений в PDF - документ
20: my $gfx=$page->gfx;
Определяем изображение, указываем URL к нему и размеры. Метод image
может работать с файлами формата: .jpeg, .png, .pnm.
21: my $img =
$pdf->image("/htdocs/flower.jpg", 100, 60);
Выбираем изображение, подлежащее выводу, и указываем координаты
размещения.
22: $gfx->image($img,$x,$y);
Следует отметить, что по умолчанию, для вывода изображений на странице
используется разрешение 72 dpi. Чтобы вывести изображение с разрешением
150 или 300 dpi, можно указать масштаб 72/150 (или 72/300) или назначить
требуемую высоту и ширину изображения:
22:
$gfx->image($img,200,$y-30,100,60);
22: $gfx->image($img,0,0,72/300);
Примечание: DPI - (англ. dots per inch) - количество
пикселей на дюйм. Указание DPI позволяет "привязать" изображение,
размеры которого задаются в относительных единицах (пикселях) к
физическим - дюймам. DPI используется при работе с разрешением принтера
или сканера. Для указания разрешения монитора традиционно используют
пиксели.
Источник:
http://ru.wikipedia.org/wiki/DPI
23: $gfx->close;
Прорисовываем изображение в документе, с учетом всех выше указанных
инструкции.
24: $gfx->stroke;
25: $gfx->compress();
6.2 Импортирование PDF - документов
Импортирует указанную страницу из стороннего pdf-документа, и позволяет
ее использовать
аналогично импортируемым в создаваемый документ картинкам.
$img =
$pdf->pdfimage($pdf_file_name,$page_number);
$gfx=$page->gfx;
$gfx->pdfimage($img,0,0,1); # ($img, x_coord, y_coord)
6.3 Создание графических изображений средствами PDF::API2
Рисуем прямоугольник
Создаем новый графический объект:
20: my $gfx=$page->gfx;
Определяем цвет заливки прямоугольника. Как и при использовании шрифтов,
данные о цветовой
настройке встраиваются непосредственно в документ. Цвет будет встроен в
документ, даже если
он определен, но не используется в дальнейшем.
26: $gfx->fillcolor(`blue`);
Строим прямоугольник. Для этого указываем координаты X (отсчет слева) и
Y (отсчет снизу)
расположения прямоугольника, а также его ширину и высоту соответственно.
27: $gfx->rectxy($x1,$y1,$x2,$y2);
Разворачиваем прямоугольник на 45 градусов.
28: $gfx->rotate(45);
Ранее мы только "настраивали" параметры будущего прямоугольника. Теперь
добавляем его в наш
PDF-документ. Метод stroke
прорисовывает контуры геометрической фигуры. Метод
fill
выполняет заливку объекта выбранным цветом.
29: $gfx->stroke;
29: $gfx->fill(1);
29: $gfx->fillstroke;
Рисование линии
Создаем новый графический объект:
40: my $line = $page->gfx;
Определяем цвет и толщину будущей линии соответственно.
41: $line->strokecolor(`blue`);
42: $line->linewidth(5);
Устанавливаем "курсор" в требуемое место страницы.
43: $line->move($x1, $y1);
Из определенной с помощью move позиции, проводим линию до точки,
задаваемой командой line.
44: $line->line($x2, $y2);
Эту команду можно выполнять несколько раз подряд, тогда начало каждой
новой линии будет исходить из точки, где заканчивается линия предыдущая.
hline(X) - проводит
горизонтальную линию из установленной командой move (или ранее
выполненными командами hline, vline, line) точки. Х - координата точки
на оси координат X. Аналогично функционирует команда
vline(Y) - проводит
вертикальную линию до точки Y на вертикальной оси системы координат.
45: $line->hline($x);
46: $line->vline($y);
Итак, линия определена, но еще не прорисована. Выводим линию, используя
заданный цвет:
48: $line->stroke;
Другие геометрические объекты
По аналогии с прямоугольником можно нарисовать следующие геометрические
фигуры:
$gfx->curve($x1, $y1, $x2, $y2,
$x3, $y3);# рисует кривую линию.
$gfx->arc($center_x, $center_y, $radius_hor, $radius_vert,
$from_ygol_naklona, $to_ygol_nakona, $move);#Рисует дугу
$gfx->ellipse($x, $y, $radius_hor, $radius_vert); # рисуем эллипс
$gfx->circle($x, $y, $radius); # рисует окружность
$gfx->rect($x,$y, $width,$height);# рисует прямоугольник
7 Вывод PDF-документа пользователю, сохранение документа
Сохранение документа под указанным именем.
50:
$pdf->saveas(`helloworld.pdf`);
Возвращаем документ как строку символов. Stringify удобно использовать
при динамической генерации pdf-документов по запросу пользователя и их
незамедлительной передаче клиенту.
50: return $pdf->stringify();
Приложение к руководству
1. Примеры кода
Создание документа и вывод текста с помощью paragraph и text
use strict;
use PDF::API2;
my ($w,$h,$f,$str_h)=(596, 842, 39, 14);
my $pdf=PDF::API2->new;
my $page = $pdf->page();
$page->mediabox($w,$h);
my $font = $pdf->corefont(`Helvetica`);
my ($x, $y) = ($f, $h-$f);
my $txt=$page->text;
$txt->font($font,12);
$txt->fillcolor(`#221E1F`);
$txt->charspace(0.7);
$txt->wordspace(2);
my @text = qw(This is functionally the same as the one above, but far
less resource);
my ($idt,$y2)=$txt->paragraph(100,700,400,400,14,@text);
$txt->translate(100,300);
$txt->text("idt - $idt, y2 - $y2");
$txt->compress();
$pdf->saveas(`helloworld.pdf`);
$pdf->end;
Открытие существующего документа PDF для редактирования
use strict;
use PDF::API2;
my ($w,$h,$f,$str_h)=(596, 842, 39, 14);
my $pdf = PDF::API2->YzyX("helloworld.pdf");
my $page = $pdf->openpage(1);
$page->cropbox($w,$h);
$pdf->saveas(`open.pdf`);
$pdf->end;
Импортирование страниц из ранее созданного PDF-документа
use strict;
use PDF::API2;
my ($w,$h,$f,$str_h)=(596, 842, 39, 14);
my $import_pdf = PDF::API2->YzyX("helloworld.pdf");
my $pdf = PDF::API2->new;
my $page = $pdf->importpage($import_pdf, 1, 1);
$page->cropbox($w,$h);
$pdf->saveas(`open.pdf`);
$pdf->end;
$import_pdf->end;
Публикация изображения
my $gfx=$page->gfx;
my $img = $pdf->image("flower.jpg", 2554, 3579);
$gfx->image($img,0,0,596,842);
$gfx->close;
$gfx->stroke;
$gfx->compress();
Использование textln для вывода текста
my $txt=$page->text;
$txt->lead($str_h);
$txt->font($font,12);
$txt->charspace(0.6);
$txt->wordspace(2);
my @txt_arr = (
qq{This chapter introduces JavaScript, discusses some of the fundamental
concepts},
qq{of JavaScript in Navigator and provides basic examples.},
qq{It shows JavaScript code in action, so you can begin writing your
own},
qq{scripts immediately, using the example code as a starting point.},
);
$txt->translate(100,500);
$txt->lead(14);
$txt->textln(@txt_arr);
Рисуем линию
my $line = $page->gfx;
$line->strokecolor(`blue`);
$line->move(100, 200);
$line->line(400, 500);
$line->close;
$line->stroke;
$line->compress();
2. Полезные ссылки
EN
Документация PDF::API2 на search.cpan.org
Официальные спецификации формата PDF
PDF::API2. Tutorial. Rick Measham
RU
Создание сайтов с возможностью печати PDF на примере PDF::API2 (http://www.opennet.ru)
Валентин Синицын. Статья. Работаем с PDF из Perl. Системный
администратор, N3. Март, 2006.