344 lines
12 KiB
PHP
344 lines
12 KiB
PHP
<?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
|
|
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
* @version $Id$
|
|
*/
|
|
|
|
/**
|
|
* Class for generate Barcode
|
|
*
|
|
* @category Zend
|
|
* @package Zend_Barcode
|
|
* @copyright Copyright (c) 2005-2014 Zend Technologies USA Inc. (http://www.zend.com)
|
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
|
*/
|
|
class Zend_Barcode
|
|
{
|
|
/**
|
|
* Factory for Zend_Barcode classes.
|
|
*
|
|
* First argument may be a string containing the base of the adapter class
|
|
* name, e.g. 'int25' corresponds to class Zend_Barcode_Object_Int25. This
|
|
* is case-insensitive.
|
|
*
|
|
* First argument may alternatively be an object of type Zend_Config.
|
|
* The barcode class base name is read from the 'barcode' property.
|
|
* The barcode config parameters are read from the 'params' property.
|
|
*
|
|
* Second argument is optional and may be an associative array of key-value
|
|
* pairs. This is used as the argument to the barcode constructor.
|
|
*
|
|
* If the first argument is of type Zend_Config, it is assumed to contain
|
|
* all parameters, and the second argument is ignored.
|
|
*
|
|
* @param mixed $barcode String name of barcode class, or Zend_Config object.
|
|
* @param mixed $renderer String name of renderer class
|
|
* @param mixed $barcodeConfig OPTIONAL; an array or Zend_Config object with barcode parameters.
|
|
* @param mixed $rendererConfig OPTIONAL; an array or Zend_Config object with renderer parameters.
|
|
* @param boolean $automaticRenderError OPTIONAL; set the automatic rendering of exception
|
|
* @return Zend_Barcode
|
|
* @throws Zend_Barcode_Exception
|
|
*/
|
|
public static function factory(
|
|
$barcode,
|
|
$renderer = 'image',
|
|
$barcodeConfig = array(),
|
|
$rendererConfig = array(),
|
|
$automaticRenderError = true
|
|
) {
|
|
/*
|
|
* Convert Zend_Config argument to plain string
|
|
* barcode name and separate config object.
|
|
*/
|
|
if ($barcode instanceof Zend_Config) {
|
|
if (isset($barcode->rendererParams)) {
|
|
$rendererConfig = $barcode->rendererParams->toArray();
|
|
}
|
|
if (isset($barcode->renderer)) {
|
|
$renderer = (string) $barcode->renderer;
|
|
}
|
|
if (isset($barcode->barcodeParams)) {
|
|
$barcodeConfig = $barcode->barcodeParams->toArray();
|
|
}
|
|
if (isset($barcode->barcode)) {
|
|
$barcode = (string) $barcode->barcode;
|
|
} else {
|
|
$barcode = null;
|
|
}
|
|
}
|
|
|
|
try {
|
|
$barcode = self::makeBarcode($barcode, $barcodeConfig);
|
|
$renderer = self::makeRenderer($renderer, $rendererConfig);
|
|
} catch (Zend_Exception $e) {
|
|
$renderable = ($e instanceof Zend_Barcode_Exception) ? $e->isRenderable() : false;
|
|
if ($automaticRenderError && $renderable) {
|
|
$barcode = self::makeBarcode('error', array(
|
|
'text' => $e->getMessage()
|
|
));
|
|
$renderer = self::makeRenderer($renderer, array());
|
|
} else {
|
|
throw $e;
|
|
}
|
|
}
|
|
|
|
$renderer->setAutomaticRenderError($automaticRenderError);
|
|
return $renderer->setBarcode($barcode);
|
|
}
|
|
|
|
/**
|
|
* Barcode Constructor
|
|
*
|
|
* @param mixed $barcode String name of barcode class, or Zend_Config object.
|
|
* @param mixed $barcodeConfig OPTIONAL; an array or Zend_Config object with barcode parameters.
|
|
* @return Zend_Barcode_Object
|
|
*/
|
|
public static function makeBarcode($barcode, $barcodeConfig = array())
|
|
{
|
|
if ($barcode instanceof Zend_Barcode_Object_ObjectAbstract) {
|
|
return $barcode;
|
|
}
|
|
|
|
/*
|
|
* Convert Zend_Config argument to plain string
|
|
* barcode name and separate config object.
|
|
*/
|
|
if ($barcode instanceof Zend_Config) {
|
|
if (isset($barcode->barcodeParams) && $barcode->barcodeParams instanceof Zend_Config) {
|
|
$barcodeConfig = $barcode->barcodeParams->toArray();
|
|
}
|
|
if (isset($barcode->barcode)) {
|
|
$barcode = (string) $barcode->barcode;
|
|
} else {
|
|
$barcode = null;
|
|
}
|
|
}
|
|
if ($barcodeConfig instanceof Zend_Config) {
|
|
$barcodeConfig = $barcodeConfig->toArray();
|
|
}
|
|
|
|
/*
|
|
* Verify that barcode parameters are in an array.
|
|
*/
|
|
if (!is_array($barcodeConfig)) {
|
|
/**
|
|
* @see Zend_Barcode_Exception
|
|
*/
|
|
throw new Zend_Barcode_Exception(
|
|
'Barcode parameters must be in an array or a Zend_Config object'
|
|
);
|
|
}
|
|
|
|
/*
|
|
* Verify that an barcode name has been specified.
|
|
*/
|
|
if (!is_string($barcode) || empty($barcode)) {
|
|
/**
|
|
* @see Zend_Barcode_Exception
|
|
*/
|
|
throw new Zend_Barcode_Exception(
|
|
'Barcode name must be specified in a string'
|
|
);
|
|
}
|
|
/*
|
|
* Form full barcode class name
|
|
*/
|
|
$barcodeNamespace = 'Zend_Barcode_Object';
|
|
if (isset($barcodeConfig['barcodeNamespace'])) {
|
|
$barcodeNamespace = $barcodeConfig['barcodeNamespace'];
|
|
}
|
|
|
|
$barcodeName = strtolower($barcodeNamespace . '_' . $barcode);
|
|
$barcodeName = str_replace(' ', '_', ucwords(
|
|
str_replace( '_', ' ', $barcodeName)
|
|
));
|
|
|
|
/*
|
|
* Load the barcode class. This throws an exception
|
|
* if the specified class cannot be loaded.
|
|
*/
|
|
if (!class_exists($barcodeName)) {
|
|
Zend_Loader::loadClass($barcodeName);
|
|
}
|
|
|
|
/*
|
|
* Create an instance of the barcode class.
|
|
* Pass the config to the barcode class constructor.
|
|
*/
|
|
$bcAdapter = new $barcodeName($barcodeConfig);
|
|
|
|
/*
|
|
* Verify that the object created is a descendent of the abstract barcode type.
|
|
*/
|
|
if (!$bcAdapter instanceof Zend_Barcode_Object_ObjectAbstract) {
|
|
/**
|
|
* @see Zend_Barcode_Exception
|
|
*/
|
|
throw new Zend_Barcode_Exception(
|
|
"Barcode class '$barcodeName' does not extend Zend_Barcode_Object_ObjectAbstract"
|
|
);
|
|
}
|
|
return $bcAdapter;
|
|
}
|
|
|
|
/**
|
|
* Renderer Constructor
|
|
*
|
|
* @param mixed $renderer String name of renderer class, or Zend_Config object.
|
|
* @param mixed $rendererConfig OPTIONAL; an array or Zend_Config object with renderer parameters.
|
|
* @return Zend_Barcode_Renderer
|
|
*/
|
|
public static function makeRenderer($renderer = 'image', $rendererConfig = array())
|
|
{
|
|
if ($renderer instanceof Zend_Barcode_Renderer_RendererAbstract) {
|
|
return $renderer;
|
|
}
|
|
|
|
/*
|
|
* Convert Zend_Config argument to plain string
|
|
* barcode name and separate config object.
|
|
*/
|
|
if ($renderer instanceof Zend_Config) {
|
|
if (isset($renderer->rendererParams)) {
|
|
$rendererConfig = $renderer->rendererParams->toArray();
|
|
}
|
|
if (isset($renderer->renderer)) {
|
|
$renderer = (string) $renderer->renderer;
|
|
}
|
|
}
|
|
if ($rendererConfig instanceof Zend_Config) {
|
|
$rendererConfig = $rendererConfig->toArray();
|
|
}
|
|
|
|
/*
|
|
* Verify that barcode parameters are in an array.
|
|
*/
|
|
if (!is_array($rendererConfig)) {
|
|
/**
|
|
* @see Zend_Barcode_Exception
|
|
*/
|
|
$e = new Zend_Barcode_Exception(
|
|
'Barcode parameters must be in an array or a Zend_Config object'
|
|
);
|
|
$e->setIsRenderable(false);
|
|
throw $e;
|
|
}
|
|
|
|
/*
|
|
* Verify that an barcode name has been specified.
|
|
*/
|
|
if (!is_string($renderer) || empty($renderer)) {
|
|
/**
|
|
* @see Zend_Barcode_Exception
|
|
*/
|
|
$e = new Zend_Barcode_Exception(
|
|
'Renderer name must be specified in a string'
|
|
);
|
|
$e->setIsRenderable(false);
|
|
throw $e;
|
|
}
|
|
|
|
/*
|
|
* Form full barcode class name
|
|
*/
|
|
$rendererNamespace = 'Zend_Barcode_Renderer';
|
|
if (isset($rendererConfig['rendererNamespace'])) {
|
|
$rendererNamespace = $rendererConfig['rendererNamespace'];
|
|
}
|
|
|
|
$rendererName = strtolower($rendererNamespace . '_' . $renderer);
|
|
$rendererName = str_replace(' ', '_', ucwords(
|
|
str_replace( '_', ' ', $rendererName)
|
|
));
|
|
|
|
/*
|
|
* Load the barcode class. This throws an exception
|
|
* if the specified class cannot be loaded.
|
|
*/
|
|
if (!class_exists($rendererName)) {
|
|
Zend_Loader::loadClass($rendererName);
|
|
}
|
|
|
|
/*
|
|
* Create an instance of the barcode class.
|
|
* Pass the config to the barcode class constructor.
|
|
*/
|
|
$rdrAdapter = new $rendererName($rendererConfig);
|
|
|
|
/*
|
|
* Verify that the object created is a descendent of the abstract barcode type.
|
|
*/
|
|
if (!$rdrAdapter instanceof Zend_Barcode_Renderer_RendererAbstract) {
|
|
/**
|
|
* @see Zend_Barcode_Exception
|
|
*/
|
|
$e = new Zend_Barcode_Exception(
|
|
"Renderer class '$rendererName' does not extend Zend_Barcode_Renderer_RendererAbstract"
|
|
);
|
|
$e->setIsRenderable(false);
|
|
throw $e;
|
|
}
|
|
return $rdrAdapter;
|
|
}
|
|
|
|
/**
|
|
* Proxy to renderer render() method
|
|
*
|
|
* @param string | Zend_Barcode_Object | array | Zend_Config $barcode
|
|
* @param string | Zend_Barcode_Renderer $renderer
|
|
* @param array | Zend_Config $barcodeConfig
|
|
* @param array | Zend_Config $rendererConfig
|
|
*/
|
|
public static function render(
|
|
$barcode,
|
|
$renderer,
|
|
$barcodeConfig = array(),
|
|
$rendererConfig = array()
|
|
) {
|
|
self::factory($barcode, $renderer, $barcodeConfig, $rendererConfig)->render();
|
|
}
|
|
|
|
/**
|
|
* Proxy to renderer draw() method
|
|
*
|
|
* @param string | Zend_Barcode_Object | array | Zend_Config $barcode
|
|
* @param string | Zend_Barcode_Renderer $renderer
|
|
* @param array | Zend_Config $barcodeConfig
|
|
* @param array | Zend_Config $rendererConfig
|
|
* @return mixed
|
|
*/
|
|
public static function draw(
|
|
$barcode,
|
|
$renderer,
|
|
$barcodeConfig = array(),
|
|
$rendererConfig = array()
|
|
) {
|
|
return self::factory($barcode, $renderer, $barcodeConfig, $rendererConfig)->draw();
|
|
}
|
|
|
|
/**
|
|
* Proxy for setBarcodeFont of Zend_Barcode_Object
|
|
* @param string $font
|
|
* @eturn void
|
|
*/
|
|
public static function setBarcodeFont($font)
|
|
{
|
|
Zend_Barcode_Object_ObjectAbstract::setBarcodeFont($font);
|
|
}
|
|
}
|