[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/tcpdf/barcode/ -> c128aobject.php (source)

   1  <?php
   2  //============================================================+
   3  // File name   : c128aobject.php
   4  // Begin       : 2002-07-31
   5  // Last Update : 2004-12-29
   6  // Author      : Karim Mribti [[email protected]]
   7  // Version     : 0.0.8a  2001-04-01 (original code)
   8  // License     : GNU LGPL (Lesser General Public License) 2.1
   9  //               http://www.gnu.org/copyleft/lesser.txt
  10  // Source Code : http://www.mribti.com/barcode/
  11  //
  12  // Description : Code 128-A Barcode Render Class for PHP using
  13  //               the GD graphics library.
  14  //               Code 128-A is a continuous, multilevel and
  15  //               include all upper case alphanumeric characters
  16  //               and ASCII control characters.
  17  //
  18  // NOTE:
  19  // This version contains changes by Nicola Asuni:
  20  //  - porting to PHP5
  21  //  - code style and formatting
  22  //  - automatic php documentation in PhpDocumentor Style
  23  //    (www.phpdoc.org)
  24  //  - minor bug fixing
  25  //============================================================+
  26  
  27  /**
  28   * Code 128-A Barcode Render Class for PHP using the GD graphics library.<br>
  29   * Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters.
  30   * @author Karim Mribti, Nicola Asuni
  31   * @name BarcodeObject
  32   * @package com.tecnick.tcpdf
  33   * @version 0.0.8a  2001-04-01 (original code)
  34   * @since 2001-03-25
  35   * @license http://www.gnu.org/copyleft/lesser.html LGPL
  36   */
  37  
  38  /**
  39   * Code 128-A Barcode Render Class for PHP using the GD graphics library.<br>
  40   * Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters.
  41   * @author Karim Mribti, Nicola Asuni
  42   * @name BarcodeObject
  43   * @package com.tecnick.tcpdf
  44   * @version 0.0.8a  2001-04-01 (original code)
  45   * @since 2001-03-25
  46   * @license http://www.gnu.org/copyleft/lesser.html LGPL
  47   */
  48  class C128AObject extends BarcodeObject {
  49      
  50      /**
  51       * Class Constructor.
  52       * @param int $Width Image width in pixels.
  53       * @param int $Height Image height in pixels. 
  54       * @param int $Style Barcode style.
  55       * @param int $Value value to print on barcode.
  56       */
  57  	public function __construct($Width, $Height, $Style, $Value) {
  58          parent::__construct($Width, $Height, $Style);
  59          $this->mValue   = $Value;
  60          $this->mChars   = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_";
  61          $this->mCharSet = array (
  62          "212222",   /*   00 */
  63          "222122",   /*   01 */
  64          "222221",   /*   02 */
  65          "121223",   /*   03 */
  66          "121322",   /*   04 */
  67          "131222",   /*   05 */
  68          "122213",   /*   06 */
  69          "122312",   /*   07 */
  70          "132212",   /*   08 */
  71          "221213",   /*   09 */
  72          "221312",   /*   10 */
  73          "231212",   /*   11 */
  74          "112232",   /*   12 */
  75          "122132",   /*   13 */
  76          "122231",   /*   14 */
  77          "113222",   /*   15 */
  78          "123122",   /*   16 */
  79          "123221",   /*   17 */
  80          "223211",   /*   18 */
  81          "221132",   /*   19 */
  82          "221231",   /*   20 */
  83          "213212",   /*   21 */
  84          "223112",   /*   22 */
  85          "312131",   /*   23 */
  86          "311222",   /*   24 */
  87          "321122",   /*   25 */
  88          "321221",   /*   26 */
  89          "312212",   /*   27 */
  90          "322112",   /*   28 */
  91          "322211",   /*   29 */
  92          "212123",   /*   30 */
  93          "212321",   /*   31 */
  94          "232121",   /*   32 */
  95          "111323",   /*   33 */
  96          "131123",   /*   34 */
  97          "131321",   /*   35 */
  98          "112313",   /*   36 */
  99          "132113",   /*   37 */
 100          "132311",   /*   38 */
 101          "211313",   /*   39 */
 102          "231113",   /*   40 */
 103          "231311",   /*   41 */
 104          "112133",   /*   42 */
 105          "112331",   /*   43 */
 106          "132131",   /*   44 */
 107          "113123",   /*   45 */
 108          "113321",   /*   46 */
 109          "133121",   /*   47 */
 110          "313121",   /*   48 */
 111          "211331",   /*   49 */
 112          "231131",   /*   50 */
 113          "213113",   /*   51 */
 114          "213311",   /*   52 */
 115          "213131",   /*   53 */
 116          "311123",   /*   54 */
 117          "311321",   /*   55 */
 118          "331121",   /*   56 */
 119          "312113",   /*   57 */
 120          "312311",   /*   58 */
 121          "332111",   /*   59 */
 122          "314111",   /*   60 */
 123          "221411",   /*   61 */
 124          "431111",   /*   62 */
 125          "111224",   /*   63 */
 126          "111422",   /*   64 */
 127          "121124",   /*   65 */
 128          "121421",   /*   66 */
 129          "141122",   /*   67 */
 130          "141221",   /*   68 */
 131          "112214",   /*   69 */
 132          "112412",   /*   70 */
 133          "122114",   /*   71 */
 134          "122411",   /*   72 */
 135          "142112",   /*   73 */
 136          "142211",   /*   74 */
 137          "241211",   /*   75 */
 138          "221114",   /*   76 */
 139          "413111",   /*   77 */
 140          "241112",   /*   78 */
 141          "134111",   /*   79 */
 142          "111242",   /*   80 */
 143          "121142",   /*   81 */
 144          "121241",   /*   82 */
 145          "114212",   /*   83 */
 146          "124112",   /*   84 */
 147          "124211",   /*   85 */
 148          "411212",   /*   86 */
 149          "421112",   /*   87 */
 150          "421211",   /*   88 */
 151          "212141",   /*   89 */
 152          "214121",   /*   90 */
 153          "412121",   /*   91 */
 154          "111143",   /*   92 */
 155          "111341",   /*   93 */
 156          "131141",   /*   94 */
 157          "114113",   /*   95 */
 158          "114311",   /*   96 */
 159          "411113",   /*   97 */
 160          "411311",   /*   98 */
 161          "113141",   /*   99 */
 162          "114131",   /*  100 */
 163          "311141",   /*  101 */
 164          "411131"    /*  102 */
 165          );
 166      }
 167  
 168      /**
 169       * Returns the character index.
 170       * @param char $char character.
 171       * @return int character index or -1 in case of error.
 172       * @access private
 173       */
 174  	private function GetCharIndex($char) {
 175          for ($i=0;$i<64;$i++) {
 176              if ($this->mChars[$i] == $char) {
 177                  return $i;
 178              }
 179          }
 180          return -1;
 181      }
 182      
 183      /**
 184       * Returns the bar size.
 185       * @param int $xres Horizontal resolution.
 186       * @param char $char Character.
 187       * @return int barcode size.
 188       * @access private
 189       */
 190  	private function GetBarSize($xres, $char) {
 191          switch ($char) {
 192              case '1': {
 193                  $cVal = BCD_C128_BAR_1;
 194                  break;
 195              }
 196              case '2': {
 197                  $cVal = BCD_C128_BAR_2;
 198                  break;
 199              }
 200              case '3': {
 201                  $cVal = BCD_C128_BAR_3;
 202                  break;
 203              }
 204              case '4': {
 205                  $cVal = BCD_C128_BAR_4;
 206                  break;
 207              }
 208              default: {
 209                  $cVal = 0;
 210              }
 211          }
 212          return  $cVal * $xres;
 213      }
 214      
 215      /**
 216       * Returns barcode size.
 217       * @param int $xres Horizontal resolution.
 218       * @return barcode size.
 219       * @access private
 220       */
 221  	private function GetSize($xres) {
 222          $len = strlen($this->mValue);
 223  
 224          if ($len == 0)  {
 225              $this->mError = "Null value";
 226              return false;
 227          }
 228          $ret = 0;
 229          for ($i=0;$i<$len;$i++) {
 230              if (($id = $this->GetCharIndex($this->mValue[$i])) == -1) {
 231                  $this->mError = "C128A not include the char '".$this->mValue[$i]."'";
 232                  return false;
 233              } else {
 234                  $cset = $this->mCharSet[$id];
 235                  $ret += $this->GetBarSize($xres, $cset[0]);
 236                  $ret += $this->GetBarSize($xres, $cset[1]);
 237                  $ret += $this->GetBarSize($xres, $cset[2]);
 238                  $ret += $this->GetBarSize($xres, $cset[3]);
 239                  $ret += $this->GetBarSize($xres, $cset[4]);
 240                  $ret += $this->GetBarSize($xres, $cset[5]);
 241              }
 242          }
 243  
 244          /* length of Check character */
 245          $cset = $this->GetCheckCharValue();
 246          $CheckSize = 0;
 247          for ($i=0;$i<6;$i++) {
 248              $CheckSize += $this->GetBarSize($cset[$i], $xres);
 249          }
 250          $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres;
 251          $StopSize  = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres;
 252          return $StartSize + $ret + $CheckSize + $StopSize;
 253      }
 254      
 255      /**
 256       * Returns the check-char value.
 257       * @return string.
 258       * @access private
 259       */
 260  	private function GetCheckCharValue() {
 261          $len = strlen($this->mValue);
 262          $sum = 103; // 'A' type;
 263          for ($i=0;$i<$len;$i++) {
 264              $sum +=  $this->GetCharIndex($this->mValue[$i]) * ($i+1);
 265          }
 266          $check  = $sum % 103;
 267          return $this->mCharSet[$check];
 268      }
 269  
 270      /**
 271       * Draws the start code.
 272       * @param int $DrawPos Drawing position.
 273       * @param int $yPos Vertical position.
 274       * @param int $ySize Vertical size.
 275       * @param int $xres Horizontal resolution.
 276       * @return int drawing position.
 277       * @access private
 278       */
 279  	private function DrawStart($DrawPos, $yPos, $ySize, $xres) {
 280          /* Start code is '211412' */
 281          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('2', $xres) , $ySize);
 282          $DrawPos += $this->GetBarSize('2', $xres);
 283          $DrawPos += $this->GetBarSize('1', $xres);
 284          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('1', $xres) , $ySize);
 285          $DrawPos += $this->GetBarSize('1', $xres);
 286          $DrawPos += $this->GetBarSize('4', $xres);
 287          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('1', $xres) , $ySize);
 288          $DrawPos += $this->GetBarSize('1', $xres);
 289          $DrawPos += $this->GetBarSize('2', $xres);
 290          return $DrawPos;
 291      }
 292      
 293      /**
 294       * Draws the stop code.
 295       * @param int $DrawPos Drawing position.
 296       * @param int $yPos Vertical position.
 297       * @param int $ySize Vertical size.
 298       * @param int $xres Horizontal resolution.
 299       * @return int drawing position.
 300       * @access private
 301       */
 302  	private function DrawStop($DrawPos, $yPos, $ySize, $xres) {
 303          /* Stop code is '2331112' */
 304          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('2', $xres) , $ySize);
 305          $DrawPos += $this->GetBarSize('2', $xres);
 306          $DrawPos += $this->GetBarSize('3', $xres);
 307          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('3', $xres) , $ySize);
 308          $DrawPos += $this->GetBarSize('3', $xres);
 309          $DrawPos += $this->GetBarSize('1', $xres);
 310          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('1', $xres) , $ySize);
 311          $DrawPos += $this->GetBarSize('1', $xres);
 312          $DrawPos += $this->GetBarSize('1', $xres);
 313          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize('2', $xres) , $ySize);
 314          $DrawPos += $this->GetBarSize('2', $xres);
 315          return $DrawPos;
 316      }
 317      
 318      /**
 319       * Draws the check-char code.
 320       * @param int $DrawPos Drawing position.
 321       * @param int $yPos Vertical position.
 322       * @param int $ySize Vertical size.
 323       * @param int $xres Horizontal resolution.
 324       * @return int drawing position.
 325       * @access private
 326       */
 327  	private function DrawCheckChar($DrawPos, $yPos, $ySize, $xres) {
 328          $cset = $this->GetCheckCharValue();
 329          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[0], $xres) , $ySize);
 330          $DrawPos += $this->GetBarSize($cset[0], $xres);
 331          $DrawPos += $this->GetBarSize($cset[1], $xres);
 332          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[2], $xres) , $ySize);
 333          $DrawPos += $this->GetBarSize($cset[2], $xres);
 334          $DrawPos += $this->GetBarSize($cset[3], $xres);
 335          $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[4], $xres) , $ySize);
 336          $DrawPos += $this->GetBarSize($cset[4], $xres);
 337          $DrawPos += $this->GetBarSize($cset[5], $xres);
 338          return $DrawPos;
 339      }
 340  
 341      /**
 342       * Draws the barcode object.
 343       * @param int $xres Horizontal resolution.
 344       * @return bool true in case of success.
 345       */
 346  	public function DrawObject($xres) {
 347          $len = strlen($this->mValue);
 348          if (($size = $this->GetSize($xres))==0) {
 349              return false;
 350          }
 351  
 352          if ($this->mStyle & BCS_ALIGN_CENTER) $sPos = (integer)(($this->mWidth - $size ) / 2);
 353          else if ($this->mStyle & BCS_ALIGN_RIGHT) $sPos = $this->mWidth - $size;
 354          else $sPos = 0;
 355  
 356          /* Total height of bar code -Bars only- */
 357          if ($this->mStyle & BCS_DRAW_TEXT) $ysize = $this->mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - $this->GetFontHeight($this->mFont);
 358          else $ysize = $this->mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
 359  
 360          /* Draw text */
 361          if ($this->mStyle & BCS_DRAW_TEXT) {
 362              if ($this->mStyle & BCS_STRETCH_TEXT) {
 363                  for ($i=0;$i<$len;$i++) {
 364                      $this->DrawChar($this->mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i,
 365                      $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, $this->mValue[$i]);
 366                  }
 367              } else {/* Center */
 368              $text_width = $this->GetFontWidth($this->mFont) * strlen($this->mValue);
 369              $this->DrawText($this->mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres),
 370              $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, $this->mValue);
 371              }
 372          }
 373  
 374          $cPos = 0;
 375          $DrawPos = $this->DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
 376          do {
 377              $c     = $this->GetCharIndex($this->mValue[$cPos]);
 378              $cset  = $this->mCharSet[$c];
 379              $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[0], $xres) , $ysize);
 380              $DrawPos += $this->GetBarSize($cset[0], $xres);
 381              $DrawPos += $this->GetBarSize($cset[1], $xres);
 382              $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[2], $xres) , $ysize);
 383              $DrawPos += $this->GetBarSize($cset[2], $xres);
 384              $DrawPos += $this->GetBarSize($cset[3], $xres);
 385              $this->DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, $this->GetBarSize($cset[4], $xres) , $ysize);
 386              $DrawPos += $this->GetBarSize($cset[4], $xres);
 387              $DrawPos += $this->GetBarSize($cset[5], $xres);
 388              $cPos++;
 389          } while ($cPos<$len);
 390          $DrawPos = $this->DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
 391          $DrawPos =  $this->DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
 392          return true;
 393      }
 394  }
 395  
 396  //============================================================+
 397  // END OF FILE
 398  //============================================================+
 399  ?>


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1