Interface.php
14.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Pdf
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: Style.php 20096 2010-01-06 02:05:09Z bkarwin $
*/
/**
* Canvas is an abstract rectangle drawing area which can be dropped into
* page object at specified place.
*
* @package Zend_Pdf
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
interface Zend_Pdf_Canvas_Interface
{
/**
* Returns dictionaries of used resources.
*
* Used for canvas implementations interoperability
*
* Structure of the returned array:
* array(
* <resTypeName> => array(
* <resName> => <Zend_Pdf_Resource object>,
* <resName> => <Zend_Pdf_Resource object>,
* <resName> => <Zend_Pdf_Resource object>,
* ...
* ),
* <resTypeName> => array(
* <resName> => <Zend_Pdf_Resource object>,
* <resName> => <Zend_Pdf_Resource object>,
* <resName> => <Zend_Pdf_Resource object>,
* ...
* ),
* ...
* 'ProcSet' => array()
* )
*
* where ProcSet array is a list of used procedure sets names (strings).
* Allowed procedure set names: 'PDF', 'Text', 'ImageB', 'ImageC', 'ImageI'
*
* @internal
* @return array
*/
public function getResources();
/**
* Get drawing instructions stream
*
* It has to be returned as a PDF stream object to make it reusable.
*
* @internal
* @returns Zend_Pdf_Resource_ContentStream
*/
public function getContents();
/**
* Return canvas height.
*
* @return float
*/
public function getHeight();
/**
* Return canvas width.
*
* @return float
*/
public function getWidth();
/**
* Draw a canvas at the specified location
*
* If upper right corner is not specified then canvas heght and width
* are used.
*
* @param Zend_Pdf_Canvas_Interface $canvas
* @param float $x1
* @param float $y1
* @param float $x2
* @param float $y2
* @return Zend_Pdf_Canvas_Interface
*/
public function drawCanvas(Zend_Pdf_Canvas_Interface $canvas, $x1, $y1, $x2 = null, $y2 = null);
/**
* Set fill color.
*
* @param Zend_Pdf_Color $color
* @return Zend_Pdf_Canvas_Interface
*/
public function setFillColor(Zend_Pdf_Color $color);
/**
* Set line color.
*
* @param Zend_Pdf_Color $color
* @return Zend_Pdf_Canvas_Interface
*/
public function setLineColor(Zend_Pdf_Color $color);
/**
* Set line width.
*
* @param float $width
* @return Zend_Pdf_Canvas_Interface
*/
public function setLineWidth($width);
/**
* Set line dashing pattern
*
* Pattern is an array of floats: array(on_length, off_length, on_length, off_length, ...)
* or Zend_Pdf_Page::LINE_DASHING_SOLID constant
* Phase is shift from the beginning of line.
*
* @param mixed $pattern
* @param array $phase
* @return Zend_Pdf_Canvas_Interface
*/
public function setLineDashingPattern($pattern, $phase = 0);
/**
* Set current font.
*
* @param Zend_Pdf_Resource_Font $font
* @param float $fontSize
* @return Zend_Pdf_Canvas_Interface
*/
public function setFont(Zend_Pdf_Resource_Font $font, $fontSize);
/**
* Set the style to use for future drawing operations on this page
*
* @param Zend_Pdf_Style $style
* @return Zend_Pdf_Canvas_Interface
*/
public function setStyle(Zend_Pdf_Style $style);
/**
* Get current font.
*
* @return Zend_Pdf_Resource_Font $font
*/
public function getFont();
/**
* Get current font size
*
* @return float $fontSize
*/
public function getFontSize();
/**
* Return the style, applied to the page.
*
* @return Zend_Pdf_Style|null
*/
public function getStyle();
/**
* Save the graphics state of this page.
* This takes a snapshot of the currently applied style, position, clipping area and
* any rotation/translation/scaling that has been applied.
*
* @throws Zend_Pdf_Exception - if a save is performed with an open path
* @return Zend_Pdf_Page
*/
public function saveGS();
/**
* Set the transparancy
*
* $alpha == 0 - transparent
* $alpha == 1 - opaque
*
* Transparency modes, supported by PDF:
* Normal (default), Multiply, Screen, Overlay, Darken, Lighten, ColorDodge, ColorBurn, HardLight,
* SoftLight, Difference, Exclusion
*
* @param float $alpha
* @param string $mode
* @throws Zend_Pdf_Exception
* @return Zend_Pdf_Canvas_Interface
*/
public function setAlpha($alpha, $mode = 'Normal');
/**
* Intersect current clipping area with a circle.
*
* @param float $x
* @param float $y
* @param float $radius
* @param float $startAngle
* @param float $endAngle
* @return Zend_Pdf_Canvas_Interface
*/
public function clipCircle($x, $y, $radius, $startAngle = null, $endAngle = null);
/**
* Intersect current clipping area with a polygon.
*
* Method signatures:
* drawEllipse($x1, $y1, $x2, $y2);
* drawEllipse($x1, $y1, $x2, $y2, $startAngle, $endAngle);
*
* @todo process special cases with $x2-$x1 == 0 or $y2-$y1 == 0
*
* @param float $x1
* @param float $y1
* @param float $x2
* @param float $y2
* @param float $startAngle
* @param float $endAngle
* @return Zend_Pdf_Canvas_Interface
*/
public function clipEllipse($x1, $y1, $x2, $y2, $startAngle = null, $endAngle = null);
/**
* Intersect current clipping area with a polygon.
*
* @param array $x - array of float (the X co-ordinates of the vertices)
* @param array $y - array of float (the Y co-ordinates of the vertices)
* @param integer $fillMethod
* @return Zend_Pdf_Canvas_Interface
*/
public function clipPolygon($x, $y, $fillMethod = Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
/**
* Intersect current clipping area with a rectangle.
*
* @param float $x1
* @param float $y1
* @param float $x2
* @param float $y2
* @return Zend_Pdf_Canvas_Interface
*/
public function clipRectangle($x1, $y1, $x2, $y2);
/**
* Draw a circle centered on x, y with a radius of radius.
*
* Method signatures:
* drawCircle($x, $y, $radius);
* drawCircle($x, $y, $radius, $fillType);
* drawCircle($x, $y, $radius, $startAngle, $endAngle);
* drawCircle($x, $y, $radius, $startAngle, $endAngle, $fillType);
*
*
* It's not a really circle, because PDF supports only cubic Bezier curves.
* But _very_ good approximation.
* It differs from a real circle on a maximum 0.00026 radiuses
* (at PI/8, 3*PI/8, 5*PI/8, 7*PI/8, 9*PI/8, 11*PI/8, 13*PI/8 and 15*PI/8 angles).
* At 0, PI/4, PI/2, 3*PI/4, PI, 5*PI/4, 3*PI/2 and 7*PI/4 it's exactly a tangent to a circle.
*
* @param float $x
* @param float $y
* @param float $radius
* @param mixed $param4
* @param mixed $param5
* @param mixed $param6
* @return Zend_Pdf_Canvas_Interface
*/
public function drawCircle($x, $y, $radius, $param4 = null, $param5 = null, $param6 = null);
/**
* Draw an ellipse inside the specified rectangle.
*
* Method signatures:
* 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);
*
* @todo process special cases with $x2-$x1 == 0 or $y2-$y1 == 0
*
* @param float $x1
* @param float $y1
* @param float $x2
* @param float $y2
* @param mixed $param5
* @param mixed $param6
* @param mixed $param7
* @return Zend_Pdf_Canvas_Interface
*/
public function drawEllipse($x1, $y1, $x2, $y2, $param5 = null, $param6 = null, $param7 = null);
/**
* Draw an image at the specified position on the page.
*
* @param Zend_Pdf_Image $image
* @param float $x1
* @param float $y1
* @param float $x2
* @param float $y2
* @return Zend_Pdf_Canvas_Interface
*/
public function drawImage(Zend_Pdf_Resource_Image $image, $x1, $y1, $x2, $y2);
/**
* Draw a LayoutBox at the specified position on the page.
*
* @internal (not implemented now)
*
* @param Zend_Pdf_Element_LayoutBox $box
* @param float $x
* @param float $y
* @return Zend_Pdf_Canvas_Interface
*/
public function drawLayoutBox($box, $x, $y);
/**
* Draw a line from x1,y1 to x2,y2.
*
* @param float $x1
* @param float $y1
* @param float $x2
* @param float $y2
* @return Zend_Pdf_Canvas_Interface
*/
public function drawLine($x1, $y1, $x2, $y2);
/**
* Draw a polygon.
*
* If $fillType is Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE or
* Zend_Pdf_Page::SHAPE_DRAW_FILL, then polygon is automatically closed.
* See detailed description of these methods in a PDF documentation
* (section 4.4.2 Path painting Operators, Filling)
*
* @param array $x - array of float (the X co-ordinates of the vertices)
* @param array $y - array of float (the Y co-ordinates of the vertices)
* @param integer $fillType
* @param integer $fillMethod
* @return Zend_Pdf_Canvas_Interface
*/
public function drawPolygon($x, $y,
$fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE,
$fillMethod = Zend_Pdf_Page::FILL_METHOD_NON_ZERO_WINDING);
/**
* Draw a rectangle.
*
* Fill types:
* Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - fill rectangle and stroke (default)
* Zend_Pdf_Page::SHAPE_DRAW_STROKE - stroke rectangle
* Zend_Pdf_Page::SHAPE_DRAW_FILL - fill rectangle
*
* @param float $x1
* @param float $y1
* @param float $x2
* @param float $y2
* @param integer $fillType
* @return Zend_Pdf_Canvas_Interface
*/
public function drawRectangle($x1, $y1, $x2, $y2, $fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
/**
* Draw a rounded rectangle.
*
* Fill types:
* Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE - fill rectangle and stroke (default)
* Zend_Pdf_Page::SHAPE_DRAW_STROKE - stroke rectangle
* Zend_Pdf_Page::SHAPE_DRAW_FILL - fill rectangle
*
* radius is an integer representing radius of the four corners, or an array
* of four integers representing the radius starting at top left, going
* clockwise
*
* @param float $x1
* @param float $y1
* @param float $x2
* @param float $y2
* @param integer|array $radius
* @param integer $fillType
* @return Zend_Pdf_Canvas_Interface
*/
public function drawRoundedRectangle($x1, $y1, $x2, $y2, $radius,
$fillType = Zend_Pdf_Page::SHAPE_DRAW_FILL_AND_STROKE);
/**
* Draw a line of text at the specified position.
*
* @param string $text
* @param float $x
* @param float $y
* @param string $charEncoding (optional) Character encoding of source text.
* Defaults to current locale.
* @throws Zend_Pdf_Exception
* @return Zend_Pdf_Canvas_Interface
*/
public function drawText($text, $x, $y, $charEncoding = '');
/**
* Close the path by drawing a straight line back to it's beginning.
*
* @internal (needs implementation)
*
* @throws Zend_Pdf_Exception - if a path hasn't been started with pathMove()
* @return Zend_Pdf_Canvas_Interface
*/
public function pathClose();
/**
* Continue the open path in a straight line to the specified position.
*
* @internal (needs implementation)
*
* @param float $x - the X co-ordinate to move to
* @param float $y - the Y co-ordinate to move to
* @return Zend_Pdf_Canvas_Interface
*/
public function pathLine($x, $y);
/**
* Start a new path at the specified position. If a path has already been started,
* move the cursor without drawing a line.
*
* @internal (needs implementation)
*
* @param float $x - the X co-ordinate to move to
* @param float $y - the Y co-ordinate to move to
* @return Zend_Pdf_Canvas_Interface
*/
public function pathMove($x, $y);
/**
* Rotate the page.
*
* @param float $x - the X co-ordinate of rotation point
* @param float $y - the Y co-ordinate of rotation point
* @param float $angle - rotation angle
* @return Zend_Pdf_Canvas_Interface
*/
public function rotate($x, $y, $angle);
/**
* Scale coordination system.
*
* @param float $xScale - X dimention scale factor
* @param float $yScale - Y dimention scale factor
* @return Zend_Pdf_Canvas_Interface
*/
public function scale($xScale, $yScale);
/**
* Translate coordination system.
*
* @param float $xShift - X coordinate shift
* @param float $yShift - Y coordinate shift
* @return Zend_Pdf_Canvas_Interface
*/
public function translate($xShift, $yShift);
/**
* Translate coordination system.
*
* @param float $x - the X co-ordinate of axis skew point
* @param float $y - the Y co-ordinate of axis skew point
* @param float $xAngle - X axis skew angle
* @param float $yAngle - Y axis skew angle
* @return Zend_Pdf_Canvas_Interface
*/
public function skew($x, $y, $xAngle, $yAngle);
/**
* Writes the raw data to the page's content stream.
*
* Be sure to consult the PDF reference to ensure your syntax is correct. No
* attempt is made to ensure the validity of the stream data.
*
* @param string $data
* @param string $procSet (optional) Name of ProcSet to add.
* @return Zend_Pdf_Canvas_Interface
*/
public function rawWrite($data, $procSet = null);
}