Image_Barcode2
[ class tree: Image_Barcode2 ] [ index: Image_Barcode2 ] [ all elements ]

Source for file Postnet.php

Documentation is available at Postnet.php

  1. <?php
  2. /* vim: set expandtab tabstop=4 softtabstop=4 shiftwidth=4: */
  3.  
  4. /**
  5.  * Image_Barcode2_Driver_Postnet class
  6.  *
  7.  * Renders PostNet barcodes
  8.  *
  9.  * PHP versions 5
  10.  *
  11.  * LICENSE: This source file is subject to version 3.0 of the PHP license
  12.  * that is available through the world-wide-web at the following URI:
  13.  * http://www.php.net/license/3_0.txt.  If you did not receive a copy of
  14.  * the PHP License and are unable to obtain it through the web, please
  15.  * send a note to license@php.net so we can mail you a copy immediately.
  16.  *
  17.  * @category  Image
  18.  * @package   Image_Barcode2
  19.  * @author    Josef "Jeff" Sipek <jeffpc@optonline.net>
  20.  * @copyright 2005 Josef "Jeff" Sipek
  21.  * @license   http://www.php.net/license/3_0.txt  PHP License 3.0
  22.  * @link      http://pear.php.net/package/Image_Barcode2
  23.  */
  24.  
  25.  /*
  26.   * Note:
  27.   *
  28.   * The generated barcode must fit the following criteria to be useable
  29.   * by the USPS scanners:
  30.   *
  31.   * When printed, the dimensions should be:
  32.   *
  33.   *     tall bar:       1/10 inches     = 2.54 mm
  34.   *  short bar:      1/20 inches     = 1.27 mm
  35.   *  density:        22 bars/inch    = 8.66 bars/cm
  36.   */
  37.  
  38. require_once 'Image/Barcode2/Driver.php';
  39. require_once 'Image/Barcode2/Common.php';
  40. require_once 'Image/Barcode2/DualHeight.php';
  41. require_once 'Image/Barcode2/Exception.php';
  42.  
  43. /**
  44.  * PostNet
  45.  *
  46.  * Package which provides a method to create PostNet barcode using GD library.
  47.  *
  48.  * @category  Image
  49.  * @package   Image_Barcode2
  50.  * @author    Josef "Jeff" Sipek <jeffpc@optonline.net>
  51.  * @copyright 2005 Josef "Jeff" Sipek
  52.  * @license   http://www.php.net/license/3_0.txt  PHP License 3.0
  53.  * @version   Release: @package_version@
  54.  * @link      http://pear.php.net/package/Image_Barcode2
  55.  */
  56. {
  57.     /**
  58.      * Bar short height
  59.      *
  60.      * @var integer 
  61.      */
  62.     private $_barshortheight = 7;
  63.  
  64.     /**
  65.      * Bar tall height
  66.      *
  67.      * @var integer 
  68.      */
  69.     private $_bartallheight = 15;
  70.  
  71.     /**
  72.      * Coding map
  73.      * @var array 
  74.      */
  75.     private $_codingmap = array(
  76.         '0' => '11000',
  77.         '1' => '00011',
  78.         '2' => '00101',
  79.         '3' => '00110',
  80.         '4' => '01001',
  81.         '5' => '01010',
  82.         '6' => '01100',
  83.         '7' => '10001',
  84.         '8' => '10010',
  85.         '9' => '10100'
  86.     );
  87.  
  88.     /**
  89.      * Class constructor
  90.      *
  91.      * @param Image_Barcode2_Writer $writer Library to use.
  92.      */
  93.     public function __construct(Image_Barcode2_Writer $writer
  94.     {
  95.         parent::__construct($writer);
  96.         $this->setBarcodeWidth(2);
  97.     }
  98.  
  99.  
  100.     /**
  101.      * Validate barcode
  102.      *
  103.      * @return void 
  104.      * @throws Image_Barcode2_Exception
  105.      */
  106.     public function validate()
  107.     {
  108.         // Check barcode for invalid characters
  109.         if (!preg_match('/^[0-9]+$/'$this->getBarcode())) {
  110.             throw new Image_Barcode2_Exception('Invalid barcode');
  111.         }
  112.     }
  113.  
  114.  
  115.     /**
  116.      * Draws a PostNet image barcode
  117.      *
  118.      * @return resource            The corresponding PostNet image barcode
  119.      *
  120.      * @access public
  121.      *
  122.      * @author Josef "Jeff" Sipek <jeffpc@optonline.net>
  123.      * @since  Image_Barcode2 0.3
  124.      */
  125.     public function draw()
  126.     {
  127.         $text   $this->getBarcode();
  128.         $writer $this->getWriter();
  129.  
  130.         // Calculate the barcode width
  131.         $barcodewidth (strlen($text)) * 2 * 5 * $this->getBarcodeWidth()
  132.             + $this->getBarcodeWidth(* 3;
  133.  
  134.         // Create the image
  135.         $img $writer->imagecreate($barcodewidth$this->_bartallheight);
  136.  
  137.         // Alocate the black and white colors
  138.         $black $writer->imagecolorallocate($img000);
  139.         $white $writer->imagecolorallocate($img255255255);
  140.  
  141.         // Fill image with white color
  142.         $writer->imagefill($img00$white);
  143.  
  144.         // Initiate x position
  145.         $xpos = 0;
  146.  
  147.         // Draws the leader
  148.         $writer->imagefilledrectangle(
  149.             $img,
  150.             $xpos,
  151.             0,
  152.             $xpos $this->getBarcodeWidth(- 1,
  153.             $this->_bartallheight,
  154.             $black
  155.         );
  156.  
  157.         $xpos += 2 * $this->getBarcodeWidth();
  158.  
  159.         // Draw $text contents
  160.         for ($idx = 0$all strlen($text)$idx $all$idx++{
  161.             $char substr($text$idx1);
  162.  
  163.             for ($baridx = 0; $baridx < 5; $baridx++{
  164.                 $elementheight $this->_barshortheight;
  165.  
  166.                 if (substr($this->_codingmap[$char]$baridx1)) {
  167.                     $elementheight = 0;
  168.                 }
  169.  
  170.                 $writer->imagefilledrectangle(
  171.                     $img
  172.                     $xpos
  173.                     $elementheight,
  174.                     $xpos $this->getBarcodeWidth(- 1,
  175.                     $this->_bartallheight,
  176.                     $black
  177.                 );
  178.  
  179.                 $xpos += 2 * $this->getBarcodeWidth();
  180.             }
  181.         }
  182.  
  183.         // Draws the trailer
  184.         $writer->imagefilledrectangle(
  185.             $img
  186.             $xpos
  187.             0
  188.             $xpos $this->getBarcodeWidth(- 1,
  189.             $this->_bartallheight,
  190.             $black
  191.         );
  192.  
  193.         return $img;
  194.     }
  195.  
  196. // class

Documentation generated on Mon, 25 Feb 2013 13:00:05 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.