<?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\Object; /** * Class for generate Interleaved 2 of 5 barcode */ class Code25interleaved extends Code25 { /** * Drawing of bearer bars * @var bool */ private $withBearerBars = false; /** * Default options for Code25interleaved barcode * @return void */ protected function getDefaultOptions() { $this->barcodeLength = 'even'; } /** * Activate/deactivate drawing of bearer bars * @param bool $value * @return Code25 */ public function setWithBearerBars($value) { $this->withBearerBars = (bool) $value; return $this; } /** * Retrieve if bearer bars are enabled * @return bool */ public function getWithBearerBars() { return $this->withBearerBars; } /** * Width of the barcode (in pixels) * @return int */ protected function calculateBarcodeWidth() { $quietZone = $this->getQuietZone(); $startCharacter = (4 * $this->barThinWidth) * $this->factor; $characterLength = (3 * $this->barThinWidth + 2 * $this->barThickWidth) * $this->factor; $encodedData = strlen($this->getText()) * $characterLength; $stopCharacter = ($this->barThickWidth + 2 * $this->barThinWidth) * $this->factor; return $quietZone + $startCharacter + $encodedData + $stopCharacter + $quietZone; } /** * Prepare array to draw barcode * @return array */ protected function prepareBarcode() { if ($this->withBearerBars) { $this->withBorder = false; } // Start character (0000) $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); // Encoded $text $text = $this->getText(); for ($i = 0, $len = strlen($text); $i < $len; $i += 2) { // Draw 2 chars at a time $char1 = substr($text, $i, 1); $char2 = substr($text, $i + 1, 1); // Interleave for ($ibar = 0; $ibar < 5; $ibar ++) { // Draws char1 bar (fore color) $barWidth = (substr($this->codingMap[$char1], $ibar, 1)) ? $this->barThickWidth : $this->barThinWidth; $barcodeTable[] = array(1, $barWidth, 0, 1); // Left space corresponding to char2 (background color) $barWidth = (substr($this->codingMap[$char2], $ibar, 1)) ? $this->barThickWidth : $this->barThinWidth; $barcodeTable[] = array(0, $barWidth, 0, 1); } } // Stop character (100) $barcodeTable[] = array(1, $this->barThickWidth, 0, 1); $barcodeTable[] = array(0, $this->barThinWidth, 0, 1); $barcodeTable[] = array(1, $this->barThinWidth, 0, 1); return $barcodeTable; } /** * Drawing of bearer bars (if enabled) * * @return void */ protected function postDrawBarcode() { if (!$this->withBearerBars) { return; } $width = $this->barThickWidth * $this->factor; $point1 = $this->rotate(-1, -1); $point2 = $this->rotate($this->calculateWidth() - 1, -1); $point3 = $this->rotate($this->calculateWidth() - 1, $width - 1); $point4 = $this->rotate(-1, $width - 1); $this->addPolygon(array( $point1, $point2, $point3, $point4, )); $point1 = $this->rotate( 0, 0 + $this->barHeight * $this->factor - 1 ); $point2 = $this->rotate( $this->calculateWidth() - 1, 0 + $this->barHeight * $this->factor - 1 ); $point3 = $this->rotate( $this->calculateWidth() - 1, 0 + $this->barHeight * $this->factor - $width ); $point4 = $this->rotate( 0, 0 + $this->barHeight * $this->factor - $width ); $this->addPolygon(array( $point1, $point2, $point3, $point4, )); } }