You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

493 lines
15 KiB

<?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-2015 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-2015 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);
}