Рисование<!-- Drawing. --> Геометрия<!-- Geometry.--> PDF использует ту же самую геометрию, что и PostScript. Она начинается с нижнего левого угла страницы и по умолчанию измеряется в пойнтах (1/72 дюйма). Размер страницы может быть получен из объекта страницы: getWidth(); $height = $pdfPage->getHeight();]]> Цвета<!-- Colors. --> PDF имеет мощные возможности для представления цветов. Модуль Zend_Pdf поддерживает шкалу серого цвета, цветовые пространства RGB и CMYK. Они могут использоваться в любом месте, где требуется объект Zend_Pdf_Color. Классы Zend_Pdf_Color_GrayScale, Zend_Pdf_Color_RGB и Zend_Pdf_Color_CMYK предоставляют этот функционал: Рисование фигур<!-- Shape Drawing. --> Все операции прорисовки могут быть выполнены в контексте страницы PDF. Класс Zend_Pdf_Page предоставляет набор примитивов для рисования: Написание текста<!-- Text Drawing.--> Операции по написанию текста также существуют в контексте страницы PDF. Для написания текста используются текущий шрифт и его текущий размер. См. подробное описание ниже. Применение шрифтов<!-- Using fonts. --> Метод Zend_Pdf_Page::drawText() использует текущий шрифт, который может быть установлен методом Zend_Pdf_Page::setFont(): PDF поддерживает Type1, TrueType, Type3 и составные шрифты. Он предоставляет еще 14 стандартных шрифтов Type1. На данный момент модуль Zend_Pdf предусматривает только эти стандартные шрифты. Они могут быть получены с помощью класса Zend_Pdf_Font_Standard. Конкретный шрифт указывается в качестве аргумента конструктора. Создание стандартного шрифта<!-- Create standard font.--> setFont($font, 36); ... ?>]]> Константы для 14 стандартных шрифтов определены с помощью класса Zend_Pdf_Const: Zend_Pdf_Const::FONT_TIMES_ROMAN Zend_Pdf_Const::FONT_TIMES_BOLD Zend_Pdf_Const::FONT_TIMES_ITALIC Zend_Pdf_Const::FONT_TIMES_BOLDITALIC Zend_Pdf_Const::FONT_HELVETICA Zend_Pdf_Const::FONT_HELVETICA_BOLD Zend_Pdf_Const::FONT_HELVETICA_ITALIC Zend_Pdf_Const::FONT_HELVETICA_BOLDITALIC Zend_Pdf_Const::FONT_COURIER Zend_Pdf_Const::FONT_COURIER_BOLD Zend_Pdf_Const::FONT_COURIER_ITALIC Zend_Pdf_Const::FONT_COURIER_BOLDITALIC Zend_Pdf_Const::FONT_SYMBOL Zend_Pdf_Const::FONT_ZAPFDINGBATS Рисование изображений<!-- Image Drawing. --> Класс предоставляет метод drawImage() для рисования изображений. Объекты изображений должны создаваться через метод Zend_Pdf_Image::imageWithPath($filePath) (сейчас поддерживаются изображения JPG, PNG и TIFF): Рисование изображения<!-- Image drawing.--> drawImage($image, 100, 100, 400, 300); ... ?>]]> Важно! Для поддержки JPEG необходимо сконфигурировать расширение GD. Важно! Для поддержки PNG необходимо сконфигурировать расширение ZLIB для работы с изображениями с Альфа-каналом. См. документацию PHP за более подробной информацией (http://www.php.net/manual/en/ref.image.php). (http://www.php.net/manual/en/ref.zlib.php). Стили рисования линий<!-- Line drawing style.--> Стили рисования линий определяются толщиной линии, цветом линии и шаблоном пунктира. Все эти параметры могут быть определены методами класса Zend_Pdf_Page. Стиль заполнения<!-- Fill style.--> Методы Zend_Pdf_Page::drawRectangle(), Zend_Pdf_Page::drawPoligon(), Zend_Pdf_Page::drawCircle() и Zend_Pdf_Page::drawEllipse() принимают аргумент $fillType как необязательный параметр. Это может быть: Zend_Pdf_Const::SHAPEDRAW_STROKE - штрихует фигуру Zend_Pdf_Const::SHAPEDRAW_FILL - заполняет фигуру Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE - заполняет и штрихует (поведение по умолчанию) Метод Zend_Pdf_Page::drawPoligon() принимает дополнительный параметр $fillMethod: Zend_Pdf_Const::FILLMETHOD_NONZEROWINDING (поведение по умолчанию) Справка по PDF описывает это правило следующим образом:
Правило ненулевого количества витков определяет, находится ли данная точка внутри траектории путем мысленного проведения луча из этой точки в бесконечность в любом направлении и последующего определения мест, где участок траектории пересекает луч. Начиная отсчет с нуля, правило добавляет 1 каждый раз, когда участок траектории пересекает луч слева направо и отнимает 1 каждый раз, когда участок траектории пересекает участок справа налево. Если после подсчета всех пересечений результатом будет 0, то точка находится вне траектории, иначе — внутри траектории. Примечание: Метод не указывает, что делать, если участок траектории совпадает или является касательной к выбранному лучу. Поскольку направление луча является произвольным, правило просто выбирает луч, который не создает таких пересечений. Для простых выпуклых траекторий правило ненулевого количества витков определяет внутреннюю и внешнюю части так, как это интуитивно предполагается. Более интересными случаями являются те, которые включают в себя сложные или самопересекающиеся траектории, как, например, на Рис. 4.10 (в справке по PDF). Для траектории, представляющую собой пятиконечную звезду, состоящую из пяти соединенных отрезков, правило считает внутренней частью всю площадь, окруженную звездой, включая пятиугольник в центре. Для траектории, состоящей из двух концентрических окружностей, площадь, окруженная обеими окружностями, считается внутренней в том случае, если обе окружности нарисованы в одном и том же направлении. Если окружности нарисованы в противоположных направлениях, то, согласно правилу, только фигура в виде баранки между ними будет внутренней частью, "дырка" будет внешней частью.
Zend_Pdf_Const::FILLMETHOD_EVENODD Справка по PDF описывает это правило следующим образом:
Альтернативой правилу ненулевого количества витков является правило чета-нечета. Это правило определяет нахождение точки проведением луча из этой точки в любом направлении и простым подсчетом количества пересечений частей траектории с этим лучом, независимо от направления пересечения. Если число нечетное, то точка находится во внутренней части; если четное, то точка находится снаружи. Это правило дает такой же результат, как и правило ненулевого количества витков для траекторий с простыми фигурами, но дает разные результаты в случае более сложных фигур. Рис. 4.11 (в справке по PDF) показывает результаты применения правила чета-нечета к сложным фигурам. В случае пятиконечной звезды правило считает точки треугольников находящимися внутри траектории, но не пятиугольник в центре. Для двух концентрических окружностей только фигура в виде баранки будет считаться внутренней частью, независимо от направлений, в которых нарисованы окружности.
Поворот<!-- Rotations. --> Страница PDF может быть повернута перед применением любых операций рисования. Это может быть сделано методом Zend_Pdf_Page::rotate(): Сохранение/восстановление графического состояния<!-- Save/restore graphics state.--> В любое время графическое состояние страницы (текущий шрифт, размер шрифта, цвет линии, цвет заполнения, стиль линии, поворот страницы, область ограничения) может быть сохранено и после восстановлено. Операция сохранения сохраняет данные в стек графического состояния, операция восстановления извлекает данные из стека. Методы в классе Zend_Pdf_Page для этих операций: Ограничение области рисования<!-- Clipping draw area. --> PDF и модуль Zend_Pdf поддерживают ограничение области рисования. Ограничение определяет область страницы, затрагиваемой операциями рисования. Вначале эта область представляет собой всю страницу. Класс Zend_Pdf_Page предоставляет набор методов для операций ограничения. Стили<!-- Styles. --> Класс Zend_Pdf_Style предоставляет набор функциональных возможностей для работы со стилями. Стили могут использоваться для сохранения набора параметров графического состояния и применять их к странице PDF одной операцией: Класс Zend_Pdf_Style предоставляет набор методов для установки или получения различных параметров графического состояния: