| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835 |
- <sect1 id="zend.pdf.drawing">
- <title>Рисование<!-- Drawing. --></title>
- <sect2 id="zend.pdf.drawing.geometry">
- <title>Геометрия<!-- Geometry.--></title>
- <para>
- PDF использует ту же самую геометрию, что и PostScript. Она начинается с
- нижнего левого угла страницы и по умолчанию измеряется в пойнтах (1/72 дюйма).
- <!--
- PDF uses the same geometry as PostScript. It starts from bottom-left corner of page
- and by default is measured in points (1/72 of an inch).
- -->
- </para>
- <para>
- Размер страницы может быть получен из объекта страницы:
- <!--
- Page size can be retrieved from a page object:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- $width = $pdfPage->getWidth();
- $height = $pdfPage->getHeight();]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.pdf.drawing.color">
- <title>Цвета<!-- Colors. --></title>
- <para>
- PDF имеет мощные возможности для представления цветов. Модуль Zend_Pdf
- поддерживает шкалу серого цвета, цветовые пространства RGB и CMYK.
- Они могут использоваться в любом месте, где требуется объект
- <code>Zend_Pdf_Color</code>. Классы <code>Zend_Pdf_Color_GrayScale</code>,
- <code>Zend_Pdf_Color_RGB</code> и <code>Zend_Pdf_Color_CMYK</code>
- предоставляют этот функционал:
- <!--
- PDF has a powerful capabilities for colors representation. Zend_Pdf module supports Gray Scale,
- RGB and CMYK color spaces. Any of them can be used in any place, where <code>Zend_Pdf_Color</code>
- object is required. <code>Zend_Pdf_Color_GrayScale</code>, <code>Zend_Pdf_Color_RGB</code> and
- <code>Zend_Pdf_Color_CMYK</code> classes provide this functionality:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- // $grayLevel (число с плавающей точкой)
- // 0.0 (черный) - 1.0 (белый)
- $color1 = new Zend_Pdf_Color_GrayScale($grayLevel);
- // $r, $g, $b (числа с плавающей точкой)
- // 0.0 (минимальная интенсивность) - 1.0 (максимальная интенсивность)
- $color2 = new Zend_Pdf_Color_RGB($r, $g, $b);
- // $c, $m, $y, $k (числа с плавающей точкой)
- // 0.0 (минимальная интенсивность) - 1.0 (максимальная интенсивность)
- $color3 = new Zend_Pdf_Color_CMYK($c, $m, $y, $k);]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.pdf.drawing.shape-drawing">
- <title>Рисование фигур<!-- Shape Drawing. --></title>
- <para>
- Все операции прорисовки могут быть выполнены в контексте страницы PDF.
- <!--
- All drawing operations can be done in a context of PDF page.
- -->
- </para>
- <para>
- Класс <code>Zend_Pdf_Page</code> предоставляет набор примитивов для рисования:
- <!--
- <code>Zend_Pdf_Page</code> class provides a set of drawing primitives:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Рисует линию от x1,y1 до x2,y2.
- *
- * @param float $x1
- * @param float $y1
- * @param float $x2
- * @param float $y2
- */
- public function drawLine($x1, $y1, $x2, $y2);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Рисует прямоугольник.
- *
- * Fill types:
- * Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE - заполнить прямоугольник и заштриховать (значение по умолчанию)
- * Zend_Pdf_Const::SHAPEDRAW_STROKE - заштриховать прямоугольник
- * Zend_Pdf_Const::SHAPEDRAW_FILL - заполнить прямоугольник
- *
- * @param float $x1
- * @param float $y1
- * @param float $x2
- * @param float $y2
- * @param integer $fillType
- */
- public function drawRectangle($x1, $y1, $x2, $y2, $fillType = Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Риcует многоугольник.
- *
- * Если $fillType (тип заполнения) равен Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE
- * или Zend_Pdf_Const::SHAPEDRAW_FILL, то многоугольник будет автоматически замкнут.
- * См. более подробное описание этих методов в документации PDF
- * (section 4.4.2 Path painting Operators, Filling)
- *
- * @param array $x - массив чисел с плавающей точкой (X-координаты вершин)
- * @param array $y - массив чисел с плавающей точкой (Y-координаты вершин)
- * @param integer $fillType
- * @param integer $fillMethod
- */
- public function drawPolygon($x, $y,
- $fillType = Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE,
- $fillMethod = Zend_Pdf_Const::FILLMETHOD_NONZEROWINDING);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Рисует окружность, центр которой находится в точке с координатами x и y,
- * с радиусом radius.
- *
- * Углы задаются в радианах.
- *
- * Сигнатуры метода:
- * drawCircle($x, $y, $radius);
- * drawCircle($x, $y, $radius, $fillType);
- * drawCircle($x, $y, $radius, $startAngle, $endAngle);
- * drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
- *
- *
- * Это не настоящая окружность, так как PDF поддерживает только кубические кривые Безье.
- * Но в очень хорошем приближении.
- * Она отличается от реальной окружности максимум на 0.00026 доли радиуса
- * (на углах PI/8, 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 и 15*PI/8).
- * На углах 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 и 7*PI/4 это точная касательная к окружности.
- *
- * @param float $x
- * @param float $y
- * @param float $radius
- * @param mixed $param4
- * @param mixed $param5
- * @param mixed $param6
- */
- public function drawCircle($x, $y, $radius, $param4 = null, $param5 = null, $param6 = null);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Рисует эллипс внутри заданного прямоугольника.
- *
- * Сигнатуры метода:
- * drawEllipse($x1, $y1, $x2, $y2);
- * drawEllipse($x1, $y1, $x2, $y2, $fillType);
- * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
- * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle, $fillType);
- *
- * Углы задаются в радианах.
- *
- * @param float $x1
- * @param float $y1
- * @param float $x2
- * @param float $y2
- * @param mixed $param5
- * @param mixed $param6
- * @param mixed $param7
- */
- public function drawEllipse($x1, $y1, $x2, $y2, $param5 = null, $param6 = null, $param7 = null);]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.pdf.drawing.text-drawing">
- <title>Написание текста<!-- Text Drawing.--></title>
- <para>
- Операции по написанию текста также существуют в контексте страницы PDF.
- <!--
- Text drawing operations are also exist in a context of PDF page:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Выводит строку текста в заданной позиции.
- *
- * @param string $text
- * @param float $x
- * @param float $y
- * @throws Zend_Pdf_Exception
- */
- public function drawText($text, $x, $y );]]>
- </programlisting>
- <para>
- Для написания текста используются текущий шрифт и его текущий размер. См.
- подробное описание ниже.
- <!--
- Current font and current font size are used for text drawing operations. See detailed description below.
- -->
- </para>
- </sect2>
- <sect2 id="zend.pdf.drawing.using-fonts">
- <title>Применение шрифтов<!-- Using fonts. --></title>
- <para>
- Метод <code>Zend_Pdf_Page::drawText()</code> использует текущий шрифт,
- который может быть установлен методом <code>Zend_Pdf_Page::setFont()</code>:
- <!--
- <code>Zend_Pdf_Page::drawText()</code> method uses current font, which can be assigned
- by <code>Zend_Pdf_Page::setFont()</code> method:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Устанавливает текущий шрифт.
- *
- * @param Zend_Pdf_Font $font
- * @param float $fontSize
- */
- public function setFont(Zend_Pdf_Font $font, $fontSize);]]>
- </programlisting>
- <para>
- PDF поддерживает Type1, TrueType, Type3 и составные шрифты. Он предоставляет еще
- 14 стандартных шрифтов Type1. На данный момент модуль <code>Zend_Pdf</code>
- предусматривает только эти стандартные шрифты. Они могут быть получены
- с помощью класса <code>Zend_Pdf_Font_Standard</code>. Конкретный шрифт
- указывается в качестве аргумента конструктора.
- <!--
- PDF supports Type1, TrueType, Type3 and composite fonts. There are also 14 standard Type1 fonts
- provided by PDF. Zend_Pdf module provides only these standard fonts now. They can be obtained by using
- <code>Zend_Pdf_Font_Standard</code> class. Concrete font is specified as a constructor argument:
- -->
- </para>
- <example>
- <title>Создание стандартного шрифта<!-- Create standard font.--></title>
- <programlisting language="php"><![CDATA[<?php
- ...
- // Создание нового шрифта
- $font = new Zend_Pdf_Font_Standard(Zend_Pdf_Const::FONT_HELVETICA);
- // Применение шрифта
- $pdfPage->setFont($font, 36);
- ...
- ?>]]>
- </programlisting>
- </example>
- <para>
- Константы для 14 стандартных шрифтов определены с помощью
- класса <code>Zend_Pdf_Const</code>:
- <!--
- Font constants for 14 standard fonts are defined within <code>Zend_Pdf_Const</code> class:
- -->
- <itemizedlist>
- <listitem>
- <para>Zend_Pdf_Const::FONT_TIMES_ROMAN</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_TIMES_BOLD</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_TIMES_ITALIC</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_TIMES_BOLDITALIC</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_HELVETICA</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_HELVETICA_BOLD</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_HELVETICA_ITALIC</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_HELVETICA_BOLDITALIC</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_COURIER</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_COURIER_BOLD</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_COURIER_ITALIC</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_COURIER_BOLDITALIC</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_SYMBOL</para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FONT_ZAPFDINGBATS</para>
- </listitem>
- </itemizedlist>
- </para>
- </sect2>
- <sect2 id="zend.pdf.drawing.image-drawing">
- <title>Рисование изображений<!-- Image Drawing. --></title>
- <para>
- Класс предоставляет метод <code>drawImage()</code> для рисования изображений.
- <!--
- <code>Zend_Pdf_Page</code> class provides drawImage() method to draw image:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Рисует изображение в заданной позиции на странице.
- *
- * @param Zend_Pdf_Resource_Image $image
- * @param float $x1
- * @param float $y1
- * @param float $x2
- * @param float $y2
- */
- public function drawImage(Zend_Pdf_Resource_Image $image, $x1, $y1, $x2, $y2);]]>
- </programlisting>
- <para>
- Объекты изображений должны создаваться через метод
- <code>Zend_Pdf_Image::imageWithPath($filePath)</code>
- (сейчас поддерживаются изображения JPG, PNG и TIFF):
- <!--
- Image objects should be created with <code>Zend_Pdf_Image::imageWithPath($filePath)</code> method
- (JPG, PNG and TIFF images are supported now):
- -->
- </para>
- <example>
- <title>Рисование изображения<!-- Image drawing.--></title>
- <programlisting language="php"><![CDATA[<?php
- ...
- // Загрузка изображения
- $image = Zend_Pdf_Image::imageWithPath('my_image.jpg');
- $pdfPage->drawImage($image, 100, 100, 400, 300);
- ...
- ?>]]>
- </programlisting>
- </example>
- <para>
- <emphasis>Важно! Для поддержки JPEG необходимо сконфигурировать
- расширение GD.</emphasis>
- <emphasis>Важно! Для поддержки PNG необходимо сконфигурировать
- расширение ZLIB для работы с изображениями с Альфа-каналом.</emphasis>
- <!--
- <emphasis>Important! JPEG support requires PHP GD extension to be configured.</emphasis>
- <emphasis>Important! PNG support requires ZLIB extension to be configured to work with Alpha channel images.</emphasis>
- -->
- </para>
- <para>
- См. документацию PHP за более подробной информацией
- (<ulink url="http://www.php.net/manual/en/ref.image.php">http://www.php.net/manual/en/ref.image.php</ulink>).
- (<ulink url="http://www.php.net/manual/en/ref.zlib.php">http://www.php.net/manual/en/ref.zlib.php</ulink>).
- <!--
- Refer to the PHP documentation for detailed information
- (<ulink url="http://www.php.net/manual/en/ref.image.php">http://www.php.net/manual/en/ref.image.php</ulink>).
- (<ulink url="http://www.php.net/manual/en/ref.zlib.php">http://www.php.net/manual/en/ref.zlib.php</ulink>).
- -->
- </para>
- </sect2>
- <sect2 id="zend.pdf.drawing.line-drawing-style">
- <title>Стили рисования линий<!-- Line drawing style.--></title>
- <para>
- Стили рисования линий определяются толщиной линии, цветом линии и шаблоном
- пунктира. Все эти параметры могут быть определены методами класса
- <code>Zend_Pdf_Page</code>.
- <!--
- Line drawing style is defined by line width, line color and line dashing pattern.
- All of this parameters can be assigned by <code>Zend_Pdf_Page</code>
- class methods:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /** Установка цвета линии. */
- public function setLineColor(Zend_Pdf_Color $color);
- /** Установка толщины линии. */
- public function setLineWidth(float $width);
- /**
- * Установка шаблона пунктира.
- *
- * $pattern (шаблон) является массивом чисел с плавающей точкой:
- * array(on_length, off_length, on_length, off_length, ...)
- * $phase (фаза) является сдвигом от начала линии.
- *
- * @param array $pattern
- * @param array $phase
- */
- public function setLineDashingPattern($pattern, $phase = 0);]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.pdf.drawing.fill-style">
- <title>Стиль заполнения<!-- Fill style.--></title>
- <para>
- Методы <code>Zend_Pdf_Page::drawRectangle()</code>, <code>Zend_Pdf_Page::drawPoligon()</code>,
- <code>Zend_Pdf_Page::drawCircle()</code> и <code>Zend_Pdf_Page::drawEllipse()</code>
- принимают аргумент <varname>$fillType</varname> как необязательный параметр.
- Это может быть:
- <!--
- <code>Zend_Pdf_Page::drawRectangle()</code>, <code>Zend_Pdf_Page::drawPoligon()</code>,
- <code>Zend_Pdf_Page::drawCircle()</code> and <code>Zend_Pdf_Page::drawEllipse()</code> methods take
- <varname>$fillType</varname> argument as an optional parameter. It can be:
- -->
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Zend_Pdf_Const::SHAPEDRAW_STROKE - штрихует фигуру <!-- stroke shape -->
- </para>
- </listitem>
- <listitem>
- <para>
- Zend_Pdf_Const::SHAPEDRAW_FILL - заполняет фигуру <!-- only fill shape-->
- </para>
- </listitem>
- <listitem>
- <para>
- Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE - заполняет и штрихует (поведение по умолчанию)
- <!-- fill and stroke (default behavior)-->
- </para>
- </listitem>
- </itemizedlist>
- <para>
- Метод <code>Zend_Pdf_Page::drawPoligon()</code> принимает дополнительный
- параметр <varname>$fillMethod</varname>:
- <!--
- <code>Zend_Pdf_Page::drawPoligon()</code> methods also takes an additional parameter
- <varname>$fillMethod</varname>:
- -->
- </para>
- <itemizedlist>
- <listitem>
- <para>
- Zend_Pdf_Const::FILLMETHOD_NONZEROWINDING (поведение по умолчанию)
- <!-- (default behavior)-->
- </para>
- <para>
- <citetitle>Справка по PDF</citetitle> описывает это правило
- следующим образом:
- <blockquote>
- <para>
- Правило ненулевого количества витков определяет, находится ли
- данная точка внутри траектории путем мысленного
- проведения луча из этой точки в бесконечность в любом направлении
- и последующего определения мест, где участок траектории пересекает луч.
- Начиная отсчет с нуля, правило добавляет 1 каждый раз, когда
- участок траектории пересекает луч слева направо и отнимает 1
- каждый раз, когда участок траектории пересекает участок справа налево.
- Если после подсчета всех пересечений результатом будет 0, то точка
- находится вне траектории, иначе — внутри траектории.
- Примечание: Метод не указывает, что делать, если участок траектории
- совпадает или является касательной к выбранному лучу. Поскольку
- направление луча является произвольным, правило просто выбирает
- луч, который не создает таких пересечений. Для простых выпуклых
- траекторий правило ненулевого количества витков определяет
- внутреннюю и внешнюю части так, как это интуитивно предполагается.
- Более интересными случаями являются те, которые включают в себя
- сложные или самопересекающиеся траектории, как, например,
- на Рис. 4.10 (в справке по PDF).
- Для траектории, представляющую собой пятиконечную звезду,
- состоящую из пяти соединенных отрезков, правило считает внутренней
- частью всю площадь, окруженную звездой, включая пятиугольник в
- центре. Для траектории, состоящей из двух концентрических
- окружностей, площадь, окруженная обеими окружностями,
- считается внутренней в том случае, если обе окружности нарисованы
- в одном и том же направлении. Если окружности нарисованы в противоположных
- направлениях, то, согласно правилу, только фигура в виде
- баранки между ними будет внутренней частью, "дырка"
- будет внешней частью.
- </para>
- </blockquote>
- <!--
- <citetitle>PDF reference</citetitle> describes this rule as follows:
- <blockquote>
- The nonzero winding number rule determines whether a given point is inside a
- path by conceptually drawing a ray from that point to infinity in any direction
- and then examining the places where a segment of the path crosses the ray. Starting
- with a count of 0, the rule adds 1 each time a path segment crosses the ray
- from left to right and subtracts 1 each time a segment crosses from right to left.
- After counting all the crossings, if the result is 0 then the point is outside the path;
- otherwise it is inside.
- Note: The method just described does not specify what to do if a path segment coincides
- with or is tangent to the chosen ray. Since the direction of the ray is arbitrary,
- the rule simply chooses a ray that does not encounter such problem intersections.
- For simple convex paths, the nonzero winding number rule defines the inside
- and outside as one would intuitively expect. The more interesting cases are those
- involving complex or self-intersecting paths like the ones shown in Figure 4.10
- (in a PDF Reference).
- For a path consisting of a five-pointed star, drawn with five connected straight
- line segments intersecting each other, the rule considers the inside to be the entire
- area enclosed by the star, including the pentagon in the center. For a path composed
- of two concentric circles, the areas enclosed by both circles are considered
- to be inside, provided that both are drawn in the same direction. If the circles are
- drawn in opposite directions, only the "doughnut" shape between them is inside,
- according to the rule; the "doughnut hole" is outside.
- </blockquote>
- -->
- </para>
- </listitem>
- <listitem>
- <para>Zend_Pdf_Const::FILLMETHOD_EVENODD</para>
- <para>
- <citetitle>Справка по PDF</citetitle> описывает это правило
- следующим образом:
- <blockquote>
- <para>
- Альтернативой правилу ненулевого количества витков является правило
- чета-нечета. Это правило определяет нахождение точки
- проведением луча из этой точки в любом направлении и простым подсчетом
- количества пересечений частей траектории с этим лучом, независимо от
- направления пересечения. Если число нечетное, то точка находится
- во внутренней части; если четное, то точка находится снаружи. Это
- правило дает такой же результат, как и правило ненулевого
- количества витков для траекторий с простыми фигурами, но дает
- разные результаты в случае более сложных фигур.
- Рис. 4.11 (в справке по PDF) показывает результаты применения
- правила чета-нечета к сложным фигурам. В случае пятиконечной
- звезды правило считает точки треугольников находящимися
- внутри траектории, но не пятиугольник в центре. Для двух
- концентрических окружностей только фигура в виде баранки будет
- считаться внутренней частью, независимо от направлений, в которых
- нарисованы окружности.
- </para>
- </blockquote>
- <!--
- <citetitle>PDF reference</citetitle> describes this rule as follows:
- <blockquote>
- An alternative to the nonzero winding number rule is the even-odd rule. This rule
- determines the "insideness" of a point by drawing a ray from that point in any
- direction and simply counting the number of path segments that cross the ray,
- regardless of direction. If this number is odd, the point is inside; if even, the point
- is outside. This yields the same results as the nonzero winding number rule for
- paths with simple shapes, but produces different results for more complex
- shapes.
- Figure 4.11 (in a PDF Reference) shows the effects of applying the even-odd rule
- to complex paths. For the five-pointed star, the rule considers the triangular
- points to be inside the path, but not the pentagon in the center. For the two
- concentric circles, only the "doughnut" shape between the two circles is considered inside,
- regardless of the directions in which the circles are drawn.
- </blockquote>
- -->
- </para>
- </listitem>
- </itemizedlist>
- </sect2>
- <sect2 id="zend.pdf.drawing.rotations">
- <title>Поворот<!-- Rotations. --></title>
- <para>
- Страница PDF может быть повернута перед применением любых операций рисования.
- Это может быть сделано методом <code>Zend_Pdf_Page::rotate()</code>:
- <!--
- PDF page can be rotated before applying any draw operation.
- It can be done by <code>Zend_Pdf_Page::rotate()</code> method:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Поворачивает страницу вокруг точки ($x, $y) на заданный угол (в радианах).
- *
- * @param float $angle
- */
- public function rotate($x, $y, $angle);]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.pdf.drawing.save-restore">
- <title>Сохранение/восстановление графического состояния<!-- Save/restore graphics state.--></title>
- <para>
- В любое время графическое состояние страницы (текущий шрифт, размер шрифта,
- цвет линии, цвет заполнения, стиль линии, поворот страницы, область ограничения) может
- быть сохранено и после восстановлено. Операция сохранения сохраняет данные
- в стек графического состояния, операция восстановления извлекает данные из стека.
- <!--
- At any time page graphics state (current font, font size, line color, fill color,
- line style, page rotation, clip area) can be saved and then restored. Save operation puts
- data to a graphics state stack, restore operation retrieves it from there.
- -->
- </para>
- <para>
- Методы в классе <code>Zend_Pdf_Page</code> для этих операций:
- <!--
- There are to methods in <code>Zend_Pdf_Page</code> class for these operations:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Сохраняет графическое состояние данной страницы.
- * Выполняет снимок используемых на данный момент стилей, положений, ... и всех
- * поворотов/преобразований/масштабирований которые были применены.
- * This takes a snapshot of the currently applied style, position, clipping area and
- * any rotation/translation/scaling that has been applied.
- */
- public function saveGS();
- /**
- * Восстанавливает графическое состояние, которое было сохранено последним
- * вызовом saveGS().
- */
- public function restoreGS();]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.pdf.drawing.clipping">
- <title>Ограничение области рисования<!-- Clipping draw area. --></title>
- <para>
- PDF и модуль Zend_Pdf поддерживают ограничение области рисования.
- Ограничение определяет область страницы, затрагиваемой
- операциями рисования. Вначале эта область представляет собой всю
- страницу.
- <!--
- PDF and Zend_Pdf module support clipping of draw area.
- Current clip area limits the regions of the page affected by painting operators. It's a whole page initially.
- -->
- </para>
- <para>
- Класс <code>Zend_Pdf_Page</code> предоставляет набор методов для операций ограничения.
- <!--
- <code>Zend_Pdf_Page</code> class provides a set of methods for clipping operations.
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Делит текущую площадь ограничения с помощью прямоугольника.
- *
- * @param float $x1
- * @param float $y1
- * @param float $x2
- * @param float $y2
- */
- public function clipRectangle($x1, $y1, $x2, $y2);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Делит текущую площадь ограничения с помощью многоугольника.
- *
- * @param array $x - массив чисел с плавающей точкой (X-координаты верхушек)
- * @param array $y - массив чисел с плавающей точкой (Y-координаты верхушек)
- * @param integer $fillMethod
- */
- public function clipPolygon($x, $y, $fillMethod = Zend_Pdf_Const::FILLMETHOD_NONZEROWINDING);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Делит текущую площадь ограничения с помощью окружности.
- *
- * @param float $x
- * @param float $y
- * @param float $radius
- * @param float $startAngle
- * @param float $endAngle
- */
- public function clipCircle($x, $y, $radius, $startAngle = null, $endAngle = null);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Делит текущую площадь ограничения с помощью эллипса.
- *
- * Сигнатуры метода:
- * drawEllipse($x1, $y1, $x2, $y2);
- * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
- *
- * @todo обрабатывать случаи, когда $x2-$x1 == 0 или $y2-$y1 == 0
- *
- * @param float $x1
- * @param float $y1
- * @param float $x2
- * @param float $y2
- * @param float $startAngle
- * @param float $endAngle
- */
- public function clipEllipse($x1, $y1, $x2, $y2, $startAngle = null, $endAngle = null);]]>
- </programlisting>
- </sect2>
- <sect2 id="zend.pdf.drawing.styles">
- <title>Стили<!-- Styles. --></title>
- <para>
- Класс <code>Zend_Pdf_Style</code> предоставляет набор функциональных
- возможностей для работы со стилями.
- <!--
- <code>Zend_Pdf_Style</code> class provides styles functionality.
- -->
- </para>
- <para>
- Стили могут использоваться для сохранения набора параметров графического
- состояния и применять их к странице PDF одной операцией:
- <!--
- Styles can be used to store a set of graphic state parameters and apply it to a PDF page by one operation:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Установить стиль для будущих операций рисования на данной странице
- *
- * @param Zend_Pdf_Style $style
- */
- public function setStyle(Zend_Pdf_Style $style);
- /**
- * Возвращает стили, используемые на странице
- *
- * @return Zend_Pdf_Style|null
- */
- public function getStyle();]]>
- </programlisting>
- <para>
- Класс <code>Zend_Pdf_Style</code> предоставляет набор методов для установки
- или получения различных параметров графического состояния:
- <!--
- <code>Zend_Pdf_Style</code> class provides a set of methods to set or get different graphics state parameters:
- -->
- </para>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Устанавливает цвет линии.
- *
- * @param Zend_Pdf_Color $color
- */
- public function setLineColor(Zend_Pdf_Color $color);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Возвращает цвет линии.
- *
- * @return Zend_Pdf_Color|null
- */
- public function getLineColor();]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Устанавливает толщину линии.
- *
- * @param float $width
- */
- public function setLineWidth($width);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Возвращает толщину линии.
- *
- * @return float
- */
- public function getLineWidth();]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Устанавливает шаблон пунктира.
- *
- * @param array $pattern
- * @param float $phase
- */
- public function setLineDashingPattern($pattern, $phase = 0);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Возвращает шаблон пунктира.
- *
- * @return array
- */
- public function getLineDashingPattern();]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Возвращает фазу пунктира.
- *
- * @return float
- */
- public function getLineDashingPhase();]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Устанавливает цвет заполнения.
- *
- * @param Zend_Pdf_Color $color
- */
- public function setFillColor(Zend_Pdf_Color $color);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Возвращает цвет заполнения.
- *
- * @return Zend_Pdf_Color|null
- */
- public function getFillColor();]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Устанавливает текущий шрифт.
- *
- * @param Zend_Pdf_Font $font
- * @param float $fontSize
- */
- public function setFont(Zend_Pdf_Font $font, $fontSize);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Изменяет текущий размер шрифта
- *
- * @param float $fontSize
- */
- public function setFontSize($fontSize);]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Возвращает текущий шрифт.
- *
- * @return Zend_Pdf_Font $font
- */
- public function getFont();]]>
- </programlisting>
- <programlisting language="php"><![CDATA[<?php
- /**
- * Возвращает текущий размер шрифта.
- *
- * @return float $fontSize
- */
- public function getFontSize();]]>
- </programlisting>
- </sect2>
- </sect1>
- <!--
- vim:se ts=4 sw=4 et:
- -->
|