[ZF-10089] Zend_Log
[zend.git] / documentation / manual / ru / module_specs / Zend_Pdf-Drawing.xml
blob8100a9dd309f8506fa1f500b4bac31bd2af9028e
1 <sect1 id="zend.pdf.drawing">
2     <title>Рисование<!-- Drawing. --></title>
4     <sect2 id="zend.pdf.drawing.geometry">
5         <title>Геометрия<!-- Geometry.--></title>
6         <para>
7         PDF использует ту же самую геометрию, что и PostScript. Она начинается с
8         нижнего левого угла страницы и по умолчанию измеряется в пойнтах (1/72 дюйма).
9 <!--
10         PDF uses the same geometry as PostScript. It starts from bottom-left corner of page
11         and by default is measured in points (1/72 of an inch).
12 -->
13         </para>
14         <para>
15         Размер страницы может быть получен из объекта страницы:
16 <!--
17         Page size can be retrieved from a page object:
18 -->
19         </para>
20         <programlisting language="php"><![CDATA[<?php
21 $width  = $pdfPage->getWidth();
22 $height = $pdfPage->getHeight();]]>
23         </programlisting>
24     </sect2>
26     <sect2 id="zend.pdf.drawing.color">
27         <title>Цвета<!-- Colors. --></title>
28         <para>
29         PDF имеет мощные возможности для представления цветов. Модуль Zend_Pdf
30         поддерживает шкалу серого цвета, цветовые пространства RGB и CMYK.
31         Они могут использоваться в любом месте, где требуется объект
32         <code>Zend_Pdf_Color</code>. Классы <code>Zend_Pdf_Color_GrayScale</code>,
33         <code>Zend_Pdf_Color_RGB</code> и <code>Zend_Pdf_Color_CMYK</code>
34         предоставляют этот функционал:
35 <!--
36         PDF has a powerful capabilities for colors representation. Zend_Pdf module supports Gray Scale,
37         RGB and CMYK color spaces. Any of them can be used in any place, where <code>Zend_Pdf_Color</code>
38         object is required. <code>Zend_Pdf_Color_GrayScale</code>, <code>Zend_Pdf_Color_RGB</code> and
39         <code>Zend_Pdf_Color_CMYK</code> classes provide this functionality:
40 -->
41         </para>
42         <programlisting language="php"><![CDATA[<?php
43 // $grayLevel (число с плавающей точкой)
44 // 0.0 (черный) - 1.0 (белый)
45 $color1 = new Zend_Pdf_Color_GrayScale($grayLevel);
47 // $r, $g, $b (числа с плавающей точкой)
48 // 0.0 (минимальная интенсивность) - 1.0 (максимальная интенсивность)
49 $color2 = new Zend_Pdf_Color_RGB($r, $g, $b);
51 // $c, $m, $y, $k (числа с плавающей точкой)
52 // 0.0 (минимальная интенсивность) - 1.0 (максимальная интенсивность)
53 $color3 = new Zend_Pdf_Color_CMYK($c, $m, $y, $k);]]>
54         </programlisting>
55     </sect2>
58     <sect2 id="zend.pdf.drawing.shape-drawing">
59         <title>Рисование фигур<!-- Shape Drawing. --></title>
60         <para>
61         Все операции прорисовки могут быть выполнены в контексте страницы PDF.
62 <!--
63         All drawing operations can be done in a context of PDF page.
64 -->
65         </para>
66         <para>
67         Класс <code>Zend_Pdf_Page</code> предоставляет набор примитивов для рисования:
68 <!--
69         <code>Zend_Pdf_Page</code> class provides a set of drawing primitives:
70 -->
71         </para>
72         <programlisting language="php"><![CDATA[<?php
73 /**
74  * Рисует линию от x1,y1 до x2,y2.
75  *
76  * @param float $x1
77  * @param float $y1
78  * @param float $x2
79  * @param float $y2
80  */
81 public function drawLine($x1, $y1, $x2, $y2);]]>
82         </programlisting>
83         <programlisting language="php"><![CDATA[<?php
84 /**
85  * Рисует прямоугольник.
86  *
87  * Fill types:
88  * Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE - заполнить прямоугольник и заштриховать (значение по умолчанию)
89  * Zend_Pdf_Const::SHAPEDRAW_STROKE      - заштриховать прямоугольник
90  * Zend_Pdf_Const::SHAPEDRAW_FILL        - заполнить прямоугольник
91  *
92  * @param float $x1
93  * @param float $y1
94  * @param float $x2
95  * @param float $y2
96  * @param integer $fillType
97  */
98 public function drawRectangle($x1, $y1, $x2, $y2, $fillType = Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE);]]>
99         </programlisting>
100         <programlisting language="php"><![CDATA[<?php
102  * Риcует многоугольник.
104  * Если $fillType (тип заполнения) равен Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE
105  * или Zend_Pdf_Const::SHAPEDRAW_FILL, то многоугольник будет автоматически замкнут.
106  * См. более подробное описание этих методов в документации PDF
107  * (section 4.4.2 Path painting Operators, Filling)
109  * @param array $x  - массив чисел с плавающей точкой (X-координаты вершин)
110  * @param array $y  - массив чисел с плавающей точкой (Y-координаты вершин)
111  * @param integer $fillType
112  * @param integer $fillMethod
113  */
114 public function drawPolygon($x, $y,
115                             $fillType = Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE,
116                             $fillMethod = Zend_Pdf_Const::FILLMETHOD_NONZEROWINDING);]]>
117         </programlisting>
118         <programlisting language="php"><![CDATA[<?php
120  * Рисует окружность, центр которой находится в точке с координатами x и y,
121  * с радиусом radius.
123  * Углы задаются в радианах.
125  * Сигнатуры метода:
126  * drawCircle($x, $y, $radius);
127  * drawCircle($x, $y, $radius, $fillType);
128  * drawCircle($x, $y, $radius, $startAngle, $endAngle);
129  * drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
132  * Это не настоящая окружность, так как PDF поддерживает только кубические кривые Безье.
133  * Но в очень хорошем приближении.
134  * Она отличается от реальной окружности максимум на 0.00026 доли радиуса
135  * (на углах PI/8, 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 и 15*PI/8).
136  * На углах 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 и 7*PI/4 это точная касательная к окружности.
138  * @param float $x
139  * @param float $y
140  * @param float $radius
141  * @param mixed $param4
142  * @param mixed $param5
143  * @param mixed $param6
144  */
145 public function  drawCircle($x, $y, $radius, $param4 = null, $param5 = null, $param6 = null);]]>
146         </programlisting>
147         <programlisting language="php"><![CDATA[<?php
149  * Рисует эллипс внутри заданного прямоугольника.
151  * Сигнатуры метода:
152  * drawEllipse($x1, $y1, $x2, $y2);
153  * drawEllipse($x1, $y1, $x2, $y2, $fillType);
154  * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
155  * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle, $fillType);
157  * Углы задаются в радианах.
159  * @param float $x1
160  * @param float $y1
161  * @param float $x2
162  * @param float $y2
163  * @param mixed $param5
164  * @param mixed $param6
165  * @param mixed $param7
166  */
167 public function drawEllipse($x1, $y1, $x2, $y2, $param5 = null, $param6 = null, $param7 = null);]]>
168         </programlisting>
169     </sect2>
171     <sect2 id="zend.pdf.drawing.text-drawing">
172         <title>Написание текста<!-- Text Drawing.--></title>
173         <para>
174         Операции по написанию текста также существуют в контексте страницы PDF.
175 <!--
176         Text drawing operations are also exist in a context of PDF page:
178         </para>
179         <programlisting language="php"><![CDATA[<?php
181  * Выводит строку текста в заданной позиции.
183  * @param string $text
184  * @param float $x
185  * @param float $y
186  * @throws Zend_Pdf_Exception
187  */
188 public function drawText($text, $x, $y );]]>
189         </programlisting>
190         <para>
191         Для написания текста используются текущий шрифт и его текущий размер. См.
192         подробное описание ниже.
193 <!--
194         Current font and current font size are used for text drawing operations. See detailed description below.
196         </para>
197     </sect2>
199     <sect2 id="zend.pdf.drawing.using-fonts">
200         <title>Применение шрифтов<!-- Using fonts. --></title>
201         <para>
202         Метод <code>Zend_Pdf_Page::drawText()</code> использует текущий шрифт,
203         который может быть установлен методом <code>Zend_Pdf_Page::setFont()</code>:
204 <!--
205         <code>Zend_Pdf_Page::drawText()</code> method uses current font, which can be assigned
206         by <code>Zend_Pdf_Page::setFont()</code> method:
208         </para>
209         <programlisting language="php"><![CDATA[<?php
211  * Устанавливает текущий шрифт.
213  * @param Zend_Pdf_Font $font
214  * @param float $fontSize
215  */
216 public function setFont(Zend_Pdf_Font $font, $fontSize);]]>
217         </programlisting>
218         <para>
219         PDF поддерживает Type1, TrueType, Type3 и составные шрифты. Он предоставляет еще
220         14 стандартных шрифтов Type1. На данный момент модуль <code>Zend_Pdf</code>
221         предусматривает только эти стандартные шрифты. Они могут быть получены
222         с помощью класса <code>Zend_Pdf_Font_Standard</code>. Конкретный шрифт
223         указывается в качестве аргумента конструктора.
224 <!--
225         PDF supports Type1, TrueType, Type3 and composite fonts. There are also 14 standard Type1 fonts
226         provided by PDF. Zend_Pdf module provides only these standard fonts now. They can be obtained by using
227         <code>Zend_Pdf_Font_Standard</code> class. Concrete font is specified as a constructor argument:
229         </para>
230         <example>
231             <title>Создание стандартного шрифта<!-- Create standard font.--></title>
232             <programlisting language="php"><![CDATA[<?php
234 // Создание нового шрифта
235 $font = new Zend_Pdf_Font_Standard(Zend_Pdf_Const::FONT_HELVETICA);
237 // Применение шрифта
238 $pdfPage->setFont($font, 36);
240 ?>]]>
241             </programlisting>
242         </example>
243         <para>
244         Константы для 14 стандартных шрифтов определены с помощью
245         класса <code>Zend_Pdf_Const</code>:
246 <!--
247         Font constants for 14 standard fonts are defined within <code>Zend_Pdf_Const</code> class:
249         <itemizedlist>
250             <listitem>
251                 <para>Zend_Pdf_Const::FONT_TIMES_ROMAN</para>
252             </listitem>
253             <listitem>
254                 <para>Zend_Pdf_Const::FONT_TIMES_BOLD</para>
255             </listitem>
256             <listitem>
257                 <para>Zend_Pdf_Const::FONT_TIMES_ITALIC</para>
258             </listitem>
259             <listitem>
260                 <para>Zend_Pdf_Const::FONT_TIMES_BOLDITALIC</para>
261             </listitem>
262             <listitem>
263                 <para>Zend_Pdf_Const::FONT_HELVETICA</para>
264             </listitem>
265             <listitem>
266                 <para>Zend_Pdf_Const::FONT_HELVETICA_BOLD</para>
267             </listitem>
268             <listitem>
269                 <para>Zend_Pdf_Const::FONT_HELVETICA_ITALIC</para>
270             </listitem>
271             <listitem>
272                 <para>Zend_Pdf_Const::FONT_HELVETICA_BOLDITALIC</para>
273             </listitem>
274             <listitem>
275                 <para>Zend_Pdf_Const::FONT_COURIER</para>
276             </listitem>
277             <listitem>
278                 <para>Zend_Pdf_Const::FONT_COURIER_BOLD</para>
279             </listitem>
280             <listitem>
281                 <para>Zend_Pdf_Const::FONT_COURIER_ITALIC</para>
282             </listitem>
283             <listitem>
284                 <para>Zend_Pdf_Const::FONT_COURIER_BOLDITALIC</para>
285             </listitem>
286             <listitem>
287                 <para>Zend_Pdf_Const::FONT_SYMBOL</para>
288             </listitem>
289             <listitem>
290                 <para>Zend_Pdf_Const::FONT_ZAPFDINGBATS</para>
291             </listitem>
292         </itemizedlist>
293         </para>
294     </sect2>
296     <sect2 id="zend.pdf.drawing.image-drawing">
297         <title>Рисование изображений<!-- Image Drawing. --></title>
298         <para>
299         Класс предоставляет метод <code>drawImage()</code> для рисования изображений.
300 <!--
301         <code>Zend_Pdf_Page</code> class provides drawImage() method to draw image:
303         </para>
304         <programlisting language="php"><![CDATA[<?php
306  * Рисует изображение в заданной позиции на странице.
308  * @param Zend_Pdf_Resource_Image $image
309  * @param float $x1
310  * @param float $y1
311  * @param float $x2
312  * @param float $y2
313  */
314 public function drawImage(Zend_Pdf_Resource_Image $image, $x1, $y1, $x2, $y2);]]>
315         </programlisting>
316         <para>
317             Объекты изображений должны создаваться через метод
318             <code>Zend_Pdf_Image::imageWithPath($filePath)</code>
319             (сейчас поддерживаются изображения JPG, PNG и TIFF):
320 <!--
321         Image objects should be created with <code>Zend_Pdf_Image::imageWithPath($filePath)</code> method
322         (JPG, PNG and TIFF images are supported now):
324         </para>
325         <example>
326             <title>Рисование изображения<!-- Image drawing.--></title>
327             <programlisting language="php"><![CDATA[<?php
329 // Загрузка изображения
330 $image = Zend_Pdf_Image::imageWithPath('my_image.jpg');
332 $pdfPage->drawImage($image, 100, 100, 400, 300);
334 ?>]]>
335             </programlisting>
336         </example>
338         <para>
339             <emphasis>Важно! Для поддержки JPEG необходимо сконфигурировать
340             расширение GD.</emphasis>
341             <emphasis>Важно! Для поддержки PNG необходимо сконфигурировать
342             расширение ZLIB для работы с изображениями с Альфа-каналом.</emphasis>
343 <!--
344             <emphasis>Important! JPEG support requires PHP GD extension to be configured.</emphasis>
345             <emphasis>Important! PNG support requires ZLIB extension to be configured to work with Alpha channel images.</emphasis>
347         </para>
348         <para>
349             См. документацию PHP за более подробной информацией
350             (<ulink url="http://www.php.net/manual/en/ref.image.php">http://www.php.net/manual/en/ref.image.php</ulink>).
351             (<ulink url="http://www.php.net/manual/en/ref.zlib.php">http://www.php.net/manual/en/ref.zlib.php</ulink>).
352 <!--
353             Refer to the PHP documentation for detailed information
354             (<ulink url="http://www.php.net/manual/en/ref.image.php">http://www.php.net/manual/en/ref.image.php</ulink>).
355             (<ulink url="http://www.php.net/manual/en/ref.zlib.php">http://www.php.net/manual/en/ref.zlib.php</ulink>).
357         </para>
358     </sect2>
360     <sect2 id="zend.pdf.drawing.line-drawing-style">
361         <title>Стили рисования линий<!-- Line drawing style.--></title>
362         <para>
363         Стили рисования линий определяются толщиной линии, цветом линии и шаблоном
364         пунктира. Все эти параметры могут быть определены методами класса
365         <code>Zend_Pdf_Page</code>.
366 <!--
367         Line drawing style is defined by line width, line color and line dashing pattern.
368         All of this parameters can be assigned by <code>Zend_Pdf_Page</code>
369         class methods:
371         </para>
372         <programlisting language="php"><![CDATA[<?php
373 /** Установка цвета линии. */
374 public function setLineColor(Zend_Pdf_Color $color);
376 /** Установка толщины линии. */
377 public function setLineWidth(float $width);
380  * Установка шаблона пунктира.
382  * $pattern (шаблон) является массивом чисел с плавающей точкой:
383  * array(on_length, off_length, on_length, off_length, ...)
384  * $phase (фаза) является сдвигом от начала линии.
386  * @param array $pattern
387  * @param array $phase
388  */
389 public function setLineDashingPattern($pattern, $phase = 0);]]>
390         </programlisting>
391     </sect2>
393     <sect2 id="zend.pdf.drawing.fill-style">
394         <title>Стиль заполнения<!-- Fill style.--></title>
395         <para>
396         Методы <code>Zend_Pdf_Page::drawRectangle()</code>, <code>Zend_Pdf_Page::drawPoligon()</code>,
397         <code>Zend_Pdf_Page::drawCircle()</code> и <code>Zend_Pdf_Page::drawEllipse()</code>
398         принимают аргумент <varname>$fillType</varname> как необязательный параметр.
399         Это может быть:
400 <!--
401         <code>Zend_Pdf_Page::drawRectangle()</code>, <code>Zend_Pdf_Page::drawPoligon()</code>,
402         <code>Zend_Pdf_Page::drawCircle()</code> and <code>Zend_Pdf_Page::drawEllipse()</code> methods take
403         <varname>$fillType</varname> argument as an optional parameter. It can be:
405         </para>
407         <itemizedlist>
408             <listitem>
409                 <para>
410                 Zend_Pdf_Const::SHAPEDRAW_STROKE - штрихует фигуру <!-- stroke shape -->
411                 </para>
412             </listitem>
413             <listitem>
414                 <para>
415                 Zend_Pdf_Const::SHAPEDRAW_FILL - заполняет фигуру <!-- only fill shape-->
416                 </para>
417             </listitem>
418             <listitem>
419                 <para>
420                 Zend_Pdf_Const::SHAPEDRAW_FILLNSTROKE - заполняет и штрихует (поведение по умолчанию)
421                 <!-- fill and stroke (default behavior)-->
422                 </para>
423             </listitem>
424         </itemizedlist>
426         <para>
427         Метод <code>Zend_Pdf_Page::drawPoligon()</code> принимает дополнительный
428         параметр <varname>$fillMethod</varname>:
429 <!--
430         <code>Zend_Pdf_Page::drawPoligon()</code> methods also takes an additional parameter
431         <varname>$fillMethod</varname>:
433         </para>
434         <itemizedlist>
435             <listitem>
436                 <para>
437                 Zend_Pdf_Const::FILLMETHOD_NONZEROWINDING (поведение по умолчанию)
438                 <!-- (default behavior)-->
439                 </para>
440                 <para>
441                 <citetitle>Справка по PDF</citetitle> описывает это правило
442                 следующим образом:
443                 <blockquote>
444                     <para>
445                         Правило ненулевого количества витков определяет, находится ли
446                         данная точка внутри траектории путем мысленного
447                         проведения луча из этой точки в бесконечность в любом направлении
448                         и последующего определения мест, где участок траектории пересекает луч.
449                         Начиная отсчет с нуля, правило добавляет 1 каждый раз, когда
450                         участок траектории пересекает луч слева направо и отнимает 1
451                         каждый раз, когда участок траектории пересекает участок справа налево.
452                         Если после подсчета всех пересечений результатом будет 0, то точка
453                         находится вне траектории, иначе — внутри траектории.
455                         Примечание: Метод не указывает, что делать, если участок траектории
456                         совпадает или является касательной к выбранному лучу. Поскольку
457                         направление луча является произвольным, правило просто выбирает
458                         луч, который не создает таких пересечений. Для простых выпуклых
459                         траекторий правило ненулевого количества витков определяет
460                         внутреннюю и внешнюю части так, как это интуитивно предполагается.
461                         Более интересными случаями являются те, которые включают в себя
462                         сложные или самопересекающиеся траектории, как, например,
463                         на Рис. 4.10 (в справке по PDF).
465                         Для траектории, представляющую собой пятиконечную звезду,
466                         состоящую из пяти соединенных отрезков, правило считает внутренней
467                         частью всю площадь, окруженную звездой, включая пятиугольник в
468                         центре. Для траектории, состоящей из двух концентрических
469                         окружностей, площадь, окруженная обеими окружностями,
470                         считается внутренней в том случае, если обе окружности нарисованы
471                         в одном и том же направлении. Если окружности нарисованы в противоположных
472                         направлениях, то, согласно правилу, только фигура в виде
473                         баранки между ними будет внутренней частью, "дырка"
474                         будет внешней частью.
475                     </para>
476                 </blockquote>
477 <!--
478                 <citetitle>PDF reference</citetitle> describes this rule as follows:
479                 <blockquote>
480 The nonzero winding number rule determines whether a given point is inside a
481 path by conceptually drawing a ray from that point to infinity in any direction
482 and then examining the places where a segment of the path crosses the ray. Starting
483 with a count of 0, the rule adds 1 each time a path segment crosses the ray
484 from left to right and subtracts 1 each time a segment crosses from right to left.
485 After counting all the crossings, if the result is 0 then the point is outside the path;
486 otherwise it is inside.
488 Note: The method just described does not specify what to do if a path segment coincides
489 with or is tangent to the chosen ray. Since the direction of the ray is arbitrary,
490 the rule simply chooses a ray that does not encounter such problem intersections.
491 For simple convex paths, the nonzero winding number rule defines the inside
492 and outside as one would intuitively expect. The more interesting cases are those
493 involving complex or self-intersecting paths like the ones shown in Figure 4.10
494 (in a PDF Reference).
496 For a path consisting of a five-pointed star, drawn with five connected straight
497 line segments intersecting each other, the rule considers the inside to be the entire
498 area enclosed by the star, including the pentagon in the center. For a path composed
499 of two concentric circles, the areas enclosed by both circles are considered
500 to be inside, provided that both are drawn in the same direction. If the circles are
501 drawn in opposite directions, only the "doughnut" shape between them is inside,
502 according to the rule; the "doughnut hole" is outside.
503             </blockquote>
505             </para>
506             </listitem>
507             <listitem>
508                 <para>Zend_Pdf_Const::FILLMETHOD_EVENODD</para>
509                 <para>
510                 <citetitle>Справка по PDF</citetitle> описывает это правило
511                 следующим образом:
512                 <blockquote>
513                     <para>
514                         Альтернативой правилу ненулевого количества витков является правило
515                         чета-нечета. Это правило определяет нахождение точки
516                         проведением луча из этой точки в любом направлении и простым подсчетом
517                         количества пересечений частей траектории с этим лучом, независимо от
518                         направления пересечения. Если число нечетное, то точка находится
519                         во внутренней части; если четное, то точка находится снаружи. Это
520                         правило дает такой же результат, как и правило ненулевого
521                         количества витков для траекторий с простыми фигурами, но дает
522                         разные результаты в случае более сложных фигур.
524                         Рис. 4.11 (в справке по PDF) показывает результаты применения
525                         правила чета-нечета к сложным фигурам. В случае пятиконечной
526                         звезды правило считает точки треугольников находящимися
527                         внутри траектории, но не пятиугольник в центре. Для двух
528                         концентрических окружностей только фигура в виде баранки будет
529                         считаться внутренней частью, независимо от направлений, в которых
530                         нарисованы окружности.
531                     </para>
532                 </blockquote>
533 <!--
534                 <citetitle>PDF reference</citetitle> describes this rule as follows:
535                 <blockquote>
536 An alternative to the nonzero winding number rule is the even-odd rule. This rule
537 determines the "insideness" of a point by drawing a ray from that point in any
538 direction and simply counting the number of path segments that cross the ray,
539 regardless of direction. If this number is odd, the point is inside; if even, the point
540 is outside. This yields the same results as the nonzero winding number rule for
541 paths with simple shapes, but produces different results for more complex
542 shapes.
544 Figure 4.11 (in a PDF Reference) shows the effects of applying the even-odd rule
545 to complex paths. For the five-pointed star, the rule considers the triangular
546 points to be inside the path, but not the pentagon in the center. For the two
547 concentric circles, only the "doughnut" shape between the two circles is considered inside,
548 regardless of the directions in which the circles are drawn.
549                 </blockquote>
551             </para>
552             </listitem>
553         </itemizedlist>
554     </sect2>
556     <sect2 id="zend.pdf.drawing.rotations">
557         <title>Поворот<!-- Rotations. --></title>
558         <para>
559         Страница PDF может быть повернута перед применением любых операций рисования.
560         Это может быть сделано методом <code>Zend_Pdf_Page::rotate()</code>:
561 <!--
562         PDF page can be rotated before applying any draw operation.
563         It can be done by <code>Zend_Pdf_Page::rotate()</code> method:
565         </para>
566         <programlisting language="php"><![CDATA[<?php
568  * Поворачивает страницу вокруг точки ($x, $y) на заданный угол (в радианах).
570  * @param float $angle
571  */
572 public function rotate($x, $y, $angle);]]>
573         </programlisting>
574     </sect2>
576     <sect2 id="zend.pdf.drawing.save-restore">
577         <title>Сохранение/восстановление графического состояния<!-- Save/restore graphics state.--></title>
578         <para>
579         В любое время графическое состояние страницы (текущий шрифт, размер шрифта,
580         цвет линии, цвет заполнения, стиль линии, поворот страницы, область ограничения) может
581         быть сохранено и после восстановлено. Операция сохранения сохраняет данные
582         в стек графического состояния, операция восстановления извлекает данные из стека.
583 <!--
584         At any time page graphics state (current font, font size, line color, fill color,
585         line style, page rotation, clip area) can be saved and then restored. Save operation puts
586         data to a graphics state stack, restore operation retrieves it from there.
588         </para>
589         <para>
590         Методы в классе <code>Zend_Pdf_Page</code> для этих операций:
591 <!--
592         There are to methods in <code>Zend_Pdf_Page</code> class for these operations:
594         </para>
595         <programlisting language="php"><![CDATA[<?php
597  * Сохраняет графическое состояние данной страницы.
598  * Выполняет снимок используемых на данный момент стилей, положений, ... и всех
599  * поворотов/преобразований/масштабирований которые были применены.
600  * This takes a snapshot of the currently applied style, position, clipping area and
601  * any rotation/translation/scaling that has been applied.
602  */
603 public function saveGS();
606  * Восстанавливает графическое состояние, которое было сохранено последним
607  * вызовом saveGS().
608  */
609 public function restoreGS();]]>
610         </programlisting>
611     </sect2>
613     <sect2 id="zend.pdf.drawing.clipping">
614         <title>Ограничение области рисования<!-- Clipping draw area. --></title>
615         <para>
616         PDF и модуль Zend_Pdf поддерживают ограничение области рисования.
617         Ограничение определяет область страницы, затрагиваемой
618         операциями рисования. Вначале эта область представляет собой всю
619         страницу.
620 <!--
621         PDF and Zend_Pdf module support clipping of draw area.
622         Current clip area limits the regions of the page affected by painting operators. It's a whole page initially.
624         </para>
625         <para>
626         Класс <code>Zend_Pdf_Page</code> предоставляет набор методов для операций ограничения.
627 <!--
628         <code>Zend_Pdf_Page</code> class provides a set of methods for clipping operations.
630         </para>
631         <programlisting language="php"><![CDATA[<?php
633  * Делит текущую площадь ограничения с помощью прямоугольника.
635  * @param float $x1
636  * @param float $y1
637  * @param float $x2
638  * @param float $y2
639  */
640 public function clipRectangle($x1, $y1, $x2, $y2);]]>
641         </programlisting>
642         <programlisting language="php"><![CDATA[<?php
644  * Делит текущую площадь ограничения с помощью многоугольника.
646  * @param array $x  - массив чисел с плавающей точкой (X-координаты верхушек)
647  * @param array $y  - массив чисел с плавающей точкой (Y-координаты верхушек)
648  * @param integer $fillMethod
649  */
650 public function clipPolygon($x, $y, $fillMethod = Zend_Pdf_Const::FILLMETHOD_NONZEROWINDING);]]>
651         </programlisting>
652         <programlisting language="php"><![CDATA[<?php
654  * Делит текущую площадь ограничения с помощью окружности.
656  * @param float $x
657  * @param float $y
658  * @param float $radius
659  * @param float $startAngle
660  * @param float $endAngle
661  */
662 public function clipCircle($x, $y, $radius, $startAngle = null, $endAngle = null);]]>
663         </programlisting>
664         <programlisting language="php"><![CDATA[<?php
666  * Делит текущую площадь ограничения с помощью эллипса.
668  * Сигнатуры метода:
669  * drawEllipse($x1, $y1, $x2, $y2);
670  * drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
672  * @todo обрабатывать случаи, когда $x2-$x1 == 0 или $y2-$y1 == 0
674  * @param float $x1
675  * @param float $y1
676  * @param float $x2
677  * @param float $y2
678  * @param float $startAngle
679  * @param float $endAngle
680  */
681 public function clipEllipse($x1, $y1, $x2, $y2, $startAngle = null, $endAngle = null);]]>
682         </programlisting>
683     </sect2>
685     <sect2 id="zend.pdf.drawing.styles">
686         <title>Стили<!-- Styles. --></title>
687         <para>
688         Класс <code>Zend_Pdf_Style</code> предоставляет набор функциональных
689         возможностей для работы со стилями.
690 <!--
691         <code>Zend_Pdf_Style</code> class provides styles functionality.
693         </para>
694         <para>
695         Стили могут использоваться для сохранения набора параметров графического
696         состояния и применять их к странице PDF одной операцией:
697 <!--
698         Styles can be used to store a set of graphic state parameters and apply it to a PDF page by one operation:
700         </para>
701         <programlisting language="php"><![CDATA[<?php
703  * Установить стиль для будущих операций рисования на данной странице
705  * @param Zend_Pdf_Style $style
706  */
707 public function setStyle(Zend_Pdf_Style $style);
710  * Возвращает стили, используемые на странице
712  * @return Zend_Pdf_Style|null
713  */
714 public function getStyle();]]>
715         </programlisting>
717         <para>
718         Класс <code>Zend_Pdf_Style</code> предоставляет набор методов для установки
719         или получения различных параметров графического состояния:
720 <!--
721         <code>Zend_Pdf_Style</code> class provides a set of methods to set or get different graphics state parameters:
723         </para>
724         <programlisting language="php"><![CDATA[<?php
726  * Устанавливает цвет линии.
728  * @param Zend_Pdf_Color $color
729  */
730 public function setLineColor(Zend_Pdf_Color $color);]]>
731         </programlisting>
732         <programlisting language="php"><![CDATA[<?php
734  * Возвращает цвет линии.
736  * @return Zend_Pdf_Color|null
737  */
738 public function getLineColor();]]>
739         </programlisting>
740         <programlisting language="php"><![CDATA[<?php
742  * Устанавливает толщину линии.
744  * @param float $width
745  */
746 public function setLineWidth($width);]]>
747         </programlisting>
748         <programlisting language="php"><![CDATA[<?php
750  * Возвращает толщину линии.
752  * @return float
753  */
754 public function getLineWidth();]]>
755         </programlisting>
756         <programlisting language="php"><![CDATA[<?php
758  * Устанавливает шаблон пунктира.
760  * @param array $pattern
761  * @param float $phase
762  */
763 public function setLineDashingPattern($pattern, $phase = 0);]]>
764         </programlisting>
765         <programlisting language="php"><![CDATA[<?php
767  * Возвращает шаблон пунктира.
769  * @return array
770  */
771 public function getLineDashingPattern();]]>
772         </programlisting>
773         <programlisting language="php"><![CDATA[<?php
775  * Возвращает фазу пунктира.
777  * @return float
778  */
779 public function getLineDashingPhase();]]>
780         </programlisting>
781         <programlisting language="php"><![CDATA[<?php
783  * Устанавливает цвет заполнения.
785  * @param Zend_Pdf_Color $color
786  */
787 public function setFillColor(Zend_Pdf_Color $color);]]>
788         </programlisting>
789         <programlisting language="php"><![CDATA[<?php
791  * Возвращает цвет заполнения.
793  * @return Zend_Pdf_Color|null
794  */
795 public function getFillColor();]]>
796         </programlisting>
797         <programlisting language="php"><![CDATA[<?php
799  * Устанавливает текущий шрифт.
801  * @param Zend_Pdf_Font $font
802  * @param float $fontSize
803  */
804 public function setFont(Zend_Pdf_Font $font, $fontSize);]]>
805         </programlisting>
806         <programlisting language="php"><![CDATA[<?php
808  * Изменяет текущий размер шрифта
810  * @param float $fontSize
811  */
812 public function setFontSize($fontSize);]]>
813         </programlisting>
814         <programlisting language="php"><![CDATA[<?php
816  * Возвращает текущий шрифт.
818  * @return Zend_Pdf_Font $font
819  */
820 public function getFont();]]>
821         </programlisting>
822         <programlisting language="php"><![CDATA[<?php
824  * Возвращает текущий размер шрифта.
826  * @return float $fontSize
827  */
828 public function getFontSize();]]>
829         </programlisting>
830     </sect2>
832 </sect1>
833 <!--
834 vim:se ts=4 sw=4 et: