- <?php
- /**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
- * @license http://framework.zend.com/license/new-bsd New BSD License
- */
-
- namespace Zend\Barcode\Renderer;
-
- use Traversable;
- use Zend\Barcode\Barcode;
- use Zend\Barcode\Exception as BarcodeException;
- use Zend\Barcode\Object;
- use Zend\Stdlib\ArrayUtils;
-
- /**
- * Class for rendering the barcode
- */
- abstract class AbstractRenderer implements RendererInterface
- {
- /**
- * 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 bool
- */
- protected $automaticRenderError = false;
-
- /**
- * Offset of the barcode from the top of the rendering resource
- * @var int
- */
- protected $topOffset = 0;
-
- /**
- * Offset of the barcode from the left of the rendering resource
- * @var int
- */
- protected $leftOffset = 0;
-
- /**
- * Horizontal position of the barcode in the rendering resource
- * @var int
- */
- protected $horizontalPosition = 'left';
-
- /**
- * Vertical position of the barcode in the rendering resource
- * @var int
- */
- protected $verticalPosition = 'top';
-
- /**
- * Module size rendering
- * @var float
- */
- protected $moduleSize = 1;
-
- /**
- * Barcode object
- * @var Object\ObjectInterface
- */
- protected $barcode;
-
- /**
- * Drawing resource
- */
- protected $resource;
-
- /**
- * Show a transparent background
- * @var Boolean
- */
- protected $transparentBackground = false;
-
- /**
- * Constructor
- * @param array|Traversable $options
- */
- public function __construct($options = null)
- {
- if ($options instanceof Traversable) {
- $options = ArrayUtils::iteratorToArray($options);
- }
- 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 AbstractRenderer
- */
- public function setOptions($options)
- {
- foreach ($options as $key => $value) {
- $method = 'set' . $key;
- if (method_exists($this, $method)) {
- $this->$method($value);
- }
- }
- return $this;
- }
-
- /**
- * Set renderer namespace for autoloading
- *
- * @param string $namespace
- * @return AbstractRenderer
- */
- public function setRendererNamespace($namespace)
- {
- $this->rendererNamespace = $namespace;
- return $this;
- }
-
- /**
- * Retrieve renderer namespace
- *
- * @return string
- */
- public function getRendererNamespace()
- {
- return $this->rendererNamespace;
- }
-
- /**
- * Set whether background should be transparent
- * Will work for SVG and Image (png and gif only)
- *
- * @param $bool
- * @return $this
- */
- public function setTransparentBackground($bool)
- {
- $this->transparentBackground = $bool;
-
- return $this;
- }
-
- /**
- * @return bool
- */
- public function getTransparentBackground()
- {
- return $this->transparentBackground;
- }
-
- /**
- * Retrieve renderer type
- * @return string
- */
- public function getType()
- {
- return $this->type;
- }
-
- /**
- * Manually adjust top position
- * @param int $value
- * @return AbstractRenderer
- * @throws Exception\OutOfRangeException
- */
- public function setTopOffset($value)
- {
- if (!is_numeric($value) || intval($value) < 0) {
- throw new Exception\OutOfRangeException(
- 'Vertical position must be greater than or equals 0'
- );
- }
- $this->topOffset = intval($value);
- return $this;
- }
-
- /**
- * Retrieve vertical adjustment
- * @return int
- */
- public function getTopOffset()
- {
- return $this->topOffset;
- }
-
- /**
- * Manually adjust left position
- * @param int $value
- * @return AbstractRenderer
- * @throws Exception\OutOfRangeException
- */
- public function setLeftOffset($value)
- {
- if (!is_numeric($value) || intval($value) < 0) {
- throw new Exception\OutOfRangeException(
- 'Horizontal position must be greater than or equals 0'
- );
- }
- $this->leftOffset = intval($value);
- return $this;
- }
-
- /**
- * Retrieve vertical adjustment
- * @return int
- */
- public function getLeftOffset()
- {
- return $this->leftOffset;
- }
-
- /**
- * Activate/Deactivate the automatic rendering of exception
- * @param bool $value
- * @return AbstractRenderer
- */
- public function setAutomaticRenderError($value)
- {
- $this->automaticRenderError = (bool) $value;
- return $this;
- }
-
- /**
- * Horizontal position of the barcode in the rendering resource
- * @param string $value
- * @return AbstractRenderer
- * @throws Exception\UnexpectedValueException
- */
- public function setHorizontalPosition($value)
- {
- if (!in_array($value, array('left', 'center', 'right'))) {
- throw new Exception\UnexpectedValueException(
- "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 AbstractRenderer
- * @throws Exception\UnexpectedValueException
- */
- public function setVerticalPosition($value)
- {
- if (!in_array($value, array('top', 'middle', 'bottom'))) {
- throw new Exception\UnexpectedValueException(
- "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 AbstractRenderer
- * @throws Exception\OutOfRangeException
- */
- public function setModuleSize($value)
- {
- if (!is_numeric($value) || floatval($value) <= 0) {
- throw new Exception\OutOfRangeException(
- '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 bool
- */
- public function getAutomaticRenderError()
- {
- return $this->automaticRenderError;
- }
-
- /**
- * Set the barcode object
- * @param Object\ObjectInterface $barcode
- * @return AbstractRenderer
- */
- public function setBarcode(Object\ObjectInterface $barcode)
- {
- $this->barcode = $barcode;
- return $this;
- }
-
- /**
- * Retrieve the barcode object
- * @return Object\ObjectInterface
- */
- public function getBarcode()
- {
- return $this->barcode;
- }
-
- /**
- * Checking of parameters after all settings
- * @return bool
- */
- public function checkParams()
- {
- $this->checkBarcodeObject();
- $this->checkSpecificParams();
- return true;
- }
-
- /**
- * Check if a barcode object is correctly provided
- * @return void
- * @throws Exception\RuntimeException
- */
- protected function checkBarcodeObject()
- {
- if ($this->barcode === null) {
- throw new Exception\RuntimeException(
- '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
- *
- * @throws BarcodeException\ExceptionInterface
- * @return mixed
- */
- public function draw()
- {
- try {
- $this->checkParams();
- $this->initRenderer();
- $this->drawInstructionList();
- } catch (BarcodeException\ExceptionInterface $e) {
- if ($this->automaticRenderError && !($e instanceof BarcodeException\RendererCreationException)) {
- $barcode = Barcode::makeBarcode(
- 'error',
- array('text' => $e->getMessage())
- );
- $this->setBarcode($barcode);
- $this->resource = null;
- $this->initRenderer();
- $this->drawInstructionList();
- } else {
- 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:
- throw new Exception\UnexpectedValueException(
- 'Unkown drawing command'
- );
- }
- }
- }
-
- /**
- * Checking of parameters after all settings
- * @return void
- */
- abstract protected function checkSpecificParams();
-
- /**
- * Initialize the rendering resource
- * @return void
- */
- abstract protected function initRenderer();
-
- /**
- * Draw a polygon in the rendering resource
- * @param array $points
- * @param int $color
- * @param bool $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 int $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
|
18334 |
Liz Lam |
initial add of jambox |
9 years ago
|
|