<?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_Barcode
* @subpackage Renderer
* @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: RendererAbstract.php 24594 2012-01-05 21:27:01Z matthew $
*/
/**
* Class for rendering the barcode
*
* @category Zend
* @package Zend_Barcode
* @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
abstract class Zend_Barcode_Renderer_RendererAbstract
{
/**
* Namespace of the renderer for autoloading
* @var string
*/
protected $_rendererNamespace = 'Zend_Barcode_Renderer';
/**
* Renderer type
* @var string
*/
protected $_type = null;
/**
* Activate/Deactivate the automatic rendering of exception
* @var boolean
*/
protected $_automaticRenderError = false;
/**
* Offset of the barcode from the top of the rendering resource
* @var integer
*/
protected $_topOffset = 0;
/**
* Offset of the barcode from the left of the rendering resource
* @var integer
*/
protected $_leftOffset = 0;
/**
* Horizontal position of the barcode in the rendering resource
* @var integer
*/
protected $_horizontalPosition = 'left';
/**
* Vertical position of the barcode in the rendering resource
* @var integer
*/
protected $_verticalPosition = 'top';
/**
* Module size rendering
* @var float
*/
protected $_moduleSize = 1;
/**
* Barcode object
* @var Zend_Barcode_Object_ObjectAbstract
*/
protected $_barcode;
/**
* Drawing resource
*/
protected $_resource;
/**
* Constructor
* @param array|Zend_Config $options
* @return void
*/
public function __construct($options = null)
{
if ($options instanceof Zend_Config) {
$options = $options->toArray();
}
if (is_array($options)) {
$this->setOptions($options);
}
$this->_type = strtolower(substr(
get_class($this),
strlen($this->_rendererNamespace) + 1
));
}
/**
* Set renderer state from options array
* @param array $options
* @return Zend_Renderer_Object
*/
public function setOptions($options)
{
foreach ($options as $key => $value) {
$method = 'set' . $key;
if (method_exists($this, $method)) {
$this->$method($value);
}
}
return $this;
}
/**
* Set renderer state from config object
* @param Zend_Config $config
* @return Zend_Renderer_Object
*/
public function setConfig(Zend_Config $config)
{
return $this->setOptions($config->toArray());
}
/**
* Set renderer namespace for autoloading
*
* @param string $namespace
* @return Zend_Renderer_Object
*/
public function setRendererNamespace($namespace)
{
$this->_rendererNamespace = $namespace;
return $this;
}
/**
* Retrieve renderer namespace
*
* @return string
*/
public function getRendererNamespace()
{
return $this->_rendererNamespace;
}
/**
* Retrieve renderer type
* @return string
*/
public function getType()
{
return $this->_type;
}
/**
* Manually adjust top position
* @param integer $value
* @return Zend_Barcode_Renderer
* @throw Zend_Barcode_Renderer_Exception
*/
public function setTopOffset($value)
{
if (!is_numeric($value) || intval($value) < 0) {
require_once 'Zend/Barcode/Renderer/Exception.php';
throw new Zend_Barcode_Renderer_Exception(
'Vertical position must be greater than or equals 0'
);
}
$this->_topOffset = intval($value);
return $this;
}
/**
* Retrieve vertical adjustment
* @return integer
*/
public function getTopOffset()
{
return $this->_topOffset;
}
/**
* Manually adjust left position
* @param integer $value
* @return Zend_Barcode_Renderer
* @throw Zend_Barcode_Renderer_Exception
*/
public function setLeftOffset($value)
{
if (!is_numeric($value) || intval($value) < 0) {
require_once 'Zend/Barcode/Renderer/Exception.php';
throw new Zend_Barcode_Renderer_Exception(
'Horizontal position must be greater than or equals 0'
);
}
$this->_leftOffset = intval($value);
return $this;
}
/**
* Retrieve vertical adjustment
* @return integer
*/
public function getLeftOffset()
{
return $this->_leftOffset;
}
/**
* Activate/Deactivate the automatic rendering of exception
* @param boolean $value
*/
public function setAutomaticRenderError($value)
{
$this->_automaticRenderError = (bool) $value;
return $this;
}
/**
* Horizontal position of the barcode in the rendering resource
* @param string $value
* @return Zend_Barcode_Renderer
* @throw Zend_Barcode_Renderer_Exception
*/
public function setHorizontalPosition($value)
{
if (!in_array($value, array('left' , 'center' , 'right'))) {
require_once 'Zend/Barcode/Renderer/Exception.php';
throw new Zend_Barcode_Renderer_Exception(
"Invalid barcode position provided must be 'left', 'center' or 'right'"
);
}
$this->_horizontalPosition = $value;
return $this;
}
/**
* Horizontal position of the barcode in the rendering resource
* @return string
*/
public function getHorizontalPosition()
{
return $this->_horizontalPosition;
}
/**
* Vertical position of the barcode in the rendering resource
* @param string $value
* @return Zend_Barcode_Renderer
* @throw Zend_Barcode_Renderer_Exception
*/
public function setVerticalPosition($value)
{
if (!in_array($value, array('top' , 'middle' , 'bottom'))) {
require_once 'Zend/Barcode/Renderer/Exception.php';
throw new Zend_Barcode_Renderer_Exception(
"Invalid barcode position provided must be 'top', 'middle' or 'bottom'"
);
}
$this->_verticalPosition = $value;
return $this;
}
/**
* Vertical position of the barcode in the rendering resource
* @return string
*/
public function getVerticalPosition()
{
return $this->_verticalPosition;
}
/**
* Set the size of a module
* @param float $value
* @return Zend_Barcode_Renderer
* @throw Zend_Barcode_Renderer_Exception
*/
public function setModuleSize($value)
{
if (!is_numeric($value) || floatval($value) <= 0) {
require_once 'Zend/Barcode/Renderer/Exception.php';
throw new Zend_Barcode_Renderer_Exception(
'Float size must be greater than 0'
);
}
$this->_moduleSize = floatval($value);
return $this;
}
/**
* Set the size of a module
* @return float
*/
public function getModuleSize()
{
return $this->_moduleSize;
}
/**
* Retrieve the automatic rendering of exception
* @return boolean
*/
public function getAutomaticRenderError()
{
return $this->_automaticRenderError;
}
/**
* Set the barcode object
* @param Zend_Barcode_Object $barcode
* @return Zend_Barcode_Renderer
*/
public function setBarcode($barcode)
{
if (!$barcode instanceof Zend_Barcode_Object_ObjectAbstract) {
require_once 'Zend/Barcode/Renderer/Exception.php';
throw new Zend_Barcode_Renderer_Exception(
'Invalid barcode object provided to setBarcode()'
);
}
$this->_barcode = $barcode;
return $this;
}
/**
* Retrieve the barcode object
* @return Zend_Barcode_Object
*/
public function getBarcode()
{
return $this->_barcode;
}
/**
* Checking of parameters after all settings
* @return boolean
*/
public function checkParams()
{
$this->_checkBarcodeObject();
$this->_checkParams();
return true;
}
/**
* Check if a barcode object is correctly provided
* @return void
* @throw Zend_Barcode_Renderer_Exception
*/
protected function _checkBarcodeObject()
{
if ($this->_barcode === null) {
/**
* @see Zend_Barcode_Renderer_Exception
*/
require_once 'Zend/Barcode/Renderer/Exception.php';
throw new Zend_Barcode_Renderer_Exception(
'No barcode object provided'
);
}
}
/**
* Calculate the left and top offset of the barcode in the
* rendering support
*
* @param float $supportHeight
* @param float $supportWidth
* @return void
*/
protected function _adjustPosition($supportHeight, $supportWidth)
{
$barcodeHeight = $this->_barcode->getHeight(true) * $this->_moduleSize;
if ($barcodeHeight != $supportHeight && $this->_topOffset == 0) {
switch ($this->_verticalPosition) {
case 'middle':
$this->_topOffset = floor(
($supportHeight - $barcodeHeight) / 2);
break;
case 'bottom':
$this->_topOffset = $supportHeight - $barcodeHeight;
break;
case 'top':
default:
$this->_topOffset = 0;
break;
}
}
$barcodeWidth = $this->_barcode->getWidth(true) * $this->_moduleSize;
if ($barcodeWidth != $supportWidth && $this->_leftOffset == 0) {
switch ($this->_horizontalPosition) {
case 'center':
$this->_leftOffset = floor(
($supportWidth - $barcodeWidth) / 2);
break;
case 'right':
$this->_leftOffset = $supportWidth - $barcodeWidth;
break;
case 'left':
default:
$this->_leftOffset = 0;
break;
}
}
}
/**
* Draw the barcode in the rendering resource
* @return mixed
*/
public function draw()
{
try {
$this->checkParams();
$this->_initRenderer();
$this->_drawInstructionList();
} catch (Zend_Exception $e) {
$renderable = false;
if ($e instanceof Zend_Barcode_Exception) {
$renderable = $e->isRenderable();
}
if ($this->_automaticRenderError && $renderable) {
$barcode = Zend_Barcode::makeBarcode(
'error',
array('text' => $e->getMessage())
);
$this->setBarcode($barcode);
$this->_resource = null;
$this->_initRenderer();
$this->_drawInstructionList();
} else {
if ($e instanceof Zend_Barcode_Exception) {
$e->setIsRenderable(false);
}
throw $e;
}
}
return $this->_resource;
}
/**
* Sub process to draw the barcode instructions
* Needed by the automatic error rendering
*/
private function _drawInstructionList()
{
$instructionList = $this->_barcode->draw();
foreach ($instructionList as $instruction) {
switch ($instruction['type']) {
case 'polygon':
$this->_drawPolygon(
$instruction['points'],
$instruction['color'],
$instruction['filled']
);
break;
case 'text': //$text, $size, $position, $font, $color, $alignment = 'center', $orientation = 0)
$this->_drawText(
$instruction['text'],
$instruction['size'],
$instruction['position'],
$instruction['font'],
$instruction['color'],
$instruction['alignment'],
$instruction['orientation']
);
break;
default:
/**
* @see Zend_Barcode_Renderer_Exception
*/
require_once 'Zend/Barcode/Renderer/Exception.php';
throw new Zend_Barcode_Renderer_Exception(
'Unkown drawing command'
);
}
}
}
/**
* Checking of parameters after all settings
* @return void
*/
abstract protected function _checkParams();
/**
* Render the resource by sending headers and drawed resource
* @return mixed
*/
abstract public function render();
/**
* Initialize the rendering resource
* @return void
*/
abstract protected function _initRenderer();
/**
* Draw a polygon in the rendering resource
* @param array $points
* @param integer $color
* @param boolean $filled
*/
abstract protected function _drawPolygon($points, $color, $filled = true);
/**
* Draw a polygon in the rendering resource
* @param string $text
* @param float $size
* @param array $position
* @param string $font
* @param integer $color
* @param string $alignment
* @param float $orientation
*/
abstract protected function _drawText(
$text,
$size,
$position,
$font,
$color,
$alignment = 'center',
$orientation = 0
);
}
# |
Change |
User |
Description |
Committed |
|
#1
|
16170 |
perforce_software |
Move Chronicle files to follow new path scheme for branching. |
|
|
//guest/perforce_software/chronicle/library/Zend/Barcode/Renderer/RendererAbstract.php |
#1
|
8972 |
Matt Attaway |
Initial add of the Chronicle source code |
|
|