Возможно вы искали: 'Киркоп. В поисках сокр...'

May 15 2025 18:14:51
  • Как сделать 8Gamers.Ru домашней страницей?
  • Игры
    • База данных по играх
    • Игровые новости
    • Игровая индустрия
    • Обзоры на игры
    • Прохождения игр
    • Гайды к играм
    • Превью о играх
    • Игровые тизеры
    • Игровые арты
    • Игровые обои
    • Игровые скриншоты
    • Игровые обложки
    • Игровые трейлеры
    • Игровое видео
    • Вышедшие игры
    • Ближайшие релизы игр
  • Кино и ТВ
    • База данных по кино
    • Статьи о кино
    • Постеры
    • Кадры из кино
    • Кино трейлеры
    • Сегодня в кино
    • Скоро в кино
  • Комиксы и манга
    • Манга по алфавиту
    • База данных по комиксах
    • Читать онлайн комиксы
    • Читать онлайн манга
    • База персонажей
  • Читы и коды
    • Чит-коды для PC игр
    • Чит-коды для консольных игр
    • Трейнеры
    • Коды Game Genie
  • Моддинг
    • Модификации
    • Карты к играм
    • Программы для моддинга
    • Статьи о моддинге
  • Геймдев
    • Всё о создании игр
    • Список движков
    • Утилиты в помощь игроделу
    • Конструкторы игр
    • Игровые движки
    • Библиотеки разработки
    • 3D-модели
    • Спрайты и тайлы
    • Музыка и звуки
    • Текстуры и фоны
  • Рецензии
    • Игры
    • Кино
    • Аниме
    • Комиксы
    • Мангу
    • Саундтреки
  • Саундтреки
    • Лирика
  • Файлы
    • Патчи к играм
    • Русификаторы к играм
    • Сохранения к играм
    • Субтитры к кино
  • Медиа
    • Видео
    • Фото
    • Аудио
    • Фан-арты
    • Косплей
    • Фото с виставок
    • Девушки из игр
    • Рисунки
    • Рисуем онлайн
    • Фотохостинг
  • Юмор
    • Анекдоты
    • Афоризмы
    • Истории
    • Стишки и эпиграммы
    • Тосты
    • Цитаты
  • Флеш
    • Азартные
    • Аркады
    • Бродилки
    • Гонки
    • Для девочек
    • Для мальчиков
    • Драки
    • Квесты
    • Леталки
    • Логические
    • Мультфильмы
    • Открытки
    • Приколы
    • Разное
    • Спорт
    • Стратегии
    • Стрелялки
Статистика

Статей: 87772
Просмотров: 96111483
Игры
Injustice:  Gods Among Us
Injustice: Gods Among Us
...
Dark Souls 2
Dark Souls 2
Dark Souls II - вторая часть самой хардкорной ролевой игры 2011-2012 года, с новым героем, сюжето...
Battlefield 4
Battlefield 4
Battlefield 4 - продолжение венценосного мультиплеер-ориентированного шутера от первого ли...
Кино
Steins;Gate
Steins;Gate
Любители японской анимации уже давно поняли ,что аниме сериалы могут дать порой гораздо больше пи...
Ку! Кин-дза-дза
Ку! Кин-дза-дза
Начинающий диджей Толик и всемирно известный виолончелист Владимир Чижов встречают на шумной моск...
Обзоры на игры
• Обзор Ibara [PCB/PS2] 18357
• Обзор The Walking ... 18801
• Обзор DMC: Devil M... 19879
• Обзор на игру Valk... 15877
• Обзор на игру Stars! 17764
• Обзор на Far Cry 3 17948
• Обзор на Resident ... 16024
• Обзор на Chivalry:... 17508
• Обзор на игру Kerb... 17981
• Обзор игры 007: Fr... 16619
Превью о играх
• Превью к игре Comp... 17960
• Превью о игре Mage... 14464
• Превью Incredible ... 14721
• Превью Firefall 13479
• Превью Dead Space 3 16334
• Превью о игре SimC... 14730
• Превью к игре Fuse 15442
• Превью Red Orche... 15542
• Превью Gothic 3 16343
• Превью Black & W... 17354
Главная » Статьи » Разное » Руководство по использованию Perl модуля PDF::API2 для начинающих (pdf perl image graph print)

Руководство по использованию Perl модуля PDF::API2 для начинающих (pdf perl image graph print)

Ключевые слова: pdf, perl, image, graph, print, (найти похожие документы)

From: Наталья Анисимова
Newsgroups: email
Date: Mon, 23 Apr 2008 17:02:14 +0000 (UTC)
Subject: Руководство по использованию Perl модуля PDF::API2 для начинающих


Название и версия

Данное руководство создавалось для 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->open($FILE_NAME); - открывает существующий
PDF-документ для редактирования. Стоит отметить, что PDF::API2 не
предоставляет возможность отредактировать содержащиеся в документе
данные. Можно только дополнить файл новой информацией. $page =
$pdf->openpage($page_number); - создает объект для редактирования
страницы с номером $page_number открытого ранее документа.

8: my $pdf = PDF::API2->open("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->open("helloworld.pdf");
6: my $pdf = PDF::API2->new;
7:
8: my $page = $pdf->importpage($import_pdf, 1, 1);


Еще один вариант импортирования страниц из строннего PDF-документа
описан в п.[21]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.
Дополнительная информация (Источник: 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.
Дополнительная информация (Источник: 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 Работа с цветом

Вспомогательный источник: 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);


Указываем координаты для размещения текста, отступ от левого и нижнего
краев страницы в выбранной единице измерения (в данном случае - px).

23: $txt->translate(400,300);


Выводим текст.

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(200,200,300,300);


Разворачиваем прямоугольник на 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(300, 200);


Из определенной с помощью move позиции, проводим линию до точки,
задаваемой командой line.

44: $line->line(400, 400);


Эту команду можно выполнять несколько раз подряд, тогда начало каждой
новой линии будет исходить из точки, где заканчивается линия
предыдущая.

hline(X) - проводит горизонтальную линию из установленной командой
move (или ранее выполненными командами hline, vline, line) точки. Х -
координата точки на оси координат X. Аналогично функционирует команда
vline(Y) - проводит вертикальную линию до точки Y на вертикальной оси
системы координат.

45: $line->hline(20);
46: $line->vline(20);


Итак, линия определена, но еще не прорисована. Выводим линию,
используя заданный цвет:

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->open("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->open("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{},
qq{},
qq{},
qq{},
qq{},
);

$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 (www.opennet.ru)
* Валентин Синицын. Статья. Работаем с PDF из Perl. Системный
администратор, N3. Март, 2006.
794 Прочтений •  [Руководство по использованию Perl модуля PDF::API2 для начинающих (pdf perl image graph print)] [08.05.2012] [Комментариев: 0]
Добавил: Ukraine Vova
Ссылки
HTML: 
[BB Url]: 
Похожие статьи
Название Добавил Добавлено
• Руководство по использованию Perl м... Ukraine Vova 08.05.2012
Ни одного комментария? Будешь первым :).
Пожалуйста, авторизуйтесь для добавления комментария.

Проект входит в сеть сайтов «8Gamers Network»

Все права сохранены. 8Gamers.NET © 2011 - 2025

Статьи
Рецензия на Pressure
Рецензия на Pressure
Чтобы обратить на себя внимание, начинающие маленькие разработчики, как правило, уходят в жанры, ...
Рецензия на Lost Chronicles of Zerzura
Рецензия на Lost Chron...
Игры, сделанные без любви и старания, похожи на воздушный шар – оболочка есть, а внутри пусто. Lo...
Рецензия на The Bridge
Рецензия на The Bridge
«Верх» и «низ» в The Bridge — понятия относительные. Прогуливаясь под аркой, можно запросто перей...
Рецензия на SimCity
Рецензия на SimCity
Когда месяц назад состоялся релиз SimCity, по Сети прокатилось цунами народного гнева – глупые ош...
Рецензия на Strategy & Tactics: World War 2
Рецензия на Strategy &...
Название Strategy & Tactics: World War II вряд ли кому-то знакомо. Зато одного взгляда на ее скри...
Рецензия на игру Scribblenauts Unlimited
Рецензия на игру Scrib...
По сложившейся традиции в информационной карточке игры мы приводим в пример несколько похожих игр...
Рецензия на игру Walking Dead: Survival Instinct, The
Рецензия на игру Walki...
Зомби и продукция-по-лицензии — которые и сами по себе не лучшие представители игровой биосферы —...
Обратная связь | RSS | Донейт | Статистика | Команда | Техническая поддержка