Chris@441: Chris@441: #============================================================+ Chris@441: # File name : c128aobject.rb Chris@441: # Begin : 2002-07-31 Chris@441: # Last Update : 2004-12-29 Chris@441: # Author : Karim Mribti [barcode@mribti.com] Chris@441: # Version : 0.0.8a 2001-04-01 (original code) Chris@441: # License : GNU LGPL (Lesser General Public License) 2.1 Chris@441: # http://www.gnu.org/copyleft/lesser.txt Chris@441: # Source Code : http://www.mribti.com/barcode/ Chris@441: # Chris@441: # Description : Code 128-A Barcode Render Class for PHP using Chris@441: # the GD graphics library. Chris@441: # Code 128-A is a continuous, multilevel and Chris@441: # include all upper case alphanumeric characters Chris@441: # and ASCII control characters. Chris@441: # Chris@441: # NOTE: Chris@441: # This version contains changes by Nicola Asuni: Chris@441: # - porting to Ruby Chris@441: # - code style and formatting Chris@441: # - automatic php documentation in PhpDocumentor Style Chris@441: # (www.phpdoc.org) Chris@441: # - minor bug fixing Chris@441: #============================================================+ Chris@441: Chris@441: # Chris@441: # Code 128-A Barcode Render Class for PHP using the GD graphics library.
Chris@441: # Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters. Chris@441: # @author Karim Mribti, Nicola Asuni Chris@441: # @name BarcodeObject Chris@441: # @package com.tecnick.tcpdf Chris@441: # @@version 0.0.8a 2001-04-01 (original code) Chris@441: # @since 2001-03-25 Chris@441: # @license http://www.gnu.org/copyleft/lesser.html LGPL Chris@441: # Chris@441: Chris@441: # Chris@441: # Code 128-A Barcode Render Class for PHP using the GD graphics library.
Chris@441: # Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters. Chris@441: # @author Karim Mribti, Nicola Asuni Chris@441: # @name BarcodeObject Chris@441: # @package com.tecnick.tcpdf Chris@441: # @@version 0.0.8a 2001-04-01 (original code) Chris@441: # @since 2001-03-25 Chris@441: # @license http://www.gnu.org/copyleft/lesser.html LGPL Chris@441: # Chris@441: class C128AObject extends BarcodeObject { Chris@441: Chris@441: # Chris@441: # Class Constructor. Chris@441: # @param int $Width Image width in pixels. Chris@441: # @param int $Height Image height in pixels. Chris@441: # @param int $Style Barcode style. Chris@441: # @param int $Value value to print on barcode. Chris@441: # Chris@441: def __construct($Width, $Height, $Style, $Value) Chris@441: parent::__construct($Width, $Height, $Style); Chris@441: @mValue = $Value; Chris@441: @mChars = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"; Chris@441: @mCharSet = array ( Chris@441: "212222", # 00# Chris@441: "222122", # 01# Chris@441: "222221", # 02# Chris@441: "121223", # 03# Chris@441: "121322", # 04# Chris@441: "131222", # 05# Chris@441: "122213", # 06# Chris@441: "122312", # 07# Chris@441: "132212", # 08# Chris@441: "221213", # 09# Chris@441: "221312", # 10# Chris@441: "231212", # 11# Chris@441: "112232", # 12# Chris@441: "122132", # 13# Chris@441: "122231", # 14# Chris@441: "113222", # 15# Chris@441: "123122", # 16# Chris@441: "123221", # 17# Chris@441: "223211", # 18# Chris@441: "221132", # 19# Chris@441: "221231", # 20# Chris@441: "213212", # 21# Chris@441: "223112", # 22# Chris@441: "312131", # 23# Chris@441: "311222", # 24# Chris@441: "321122", # 25# Chris@441: "321221", # 26# Chris@441: "312212", # 27# Chris@441: "322112", # 28# Chris@441: "322211", # 29# Chris@441: "212123", # 30# Chris@441: "212321", # 31# Chris@441: "232121", # 32# Chris@441: "111323", # 33# Chris@441: "131123", # 34# Chris@441: "131321", # 35# Chris@441: "112313", # 36# Chris@441: "132113", # 37# Chris@441: "132311", # 38# Chris@441: "211313", # 39# Chris@441: "231113", # 40# Chris@441: "231311", # 41# Chris@441: "112133", # 42# Chris@441: "112331", # 43# Chris@441: "132131", # 44# Chris@441: "113123", # 45# Chris@441: "113321", # 46# Chris@441: "133121", # 47# Chris@441: "313121", # 48# Chris@441: "211331", # 49# Chris@441: "231131", # 50# Chris@441: "213113", # 51# Chris@441: "213311", # 52# Chris@441: "213131", # 53# Chris@441: "311123", # 54# Chris@441: "311321", # 55# Chris@441: "331121", # 56# Chris@441: "312113", # 57# Chris@441: "312311", # 58# Chris@441: "332111", # 59# Chris@441: "314111", # 60# Chris@441: "221411", # 61# Chris@441: "431111", # 62# Chris@441: "111224", # 63# Chris@441: "111422", # 64# Chris@441: "121124", # 65# Chris@441: "121421", # 66# Chris@441: "141122", # 67# Chris@441: "141221", # 68# Chris@441: "112214", # 69# Chris@441: "112412", # 70# Chris@441: "122114", # 71# Chris@441: "122411", # 72# Chris@441: "142112", # 73# Chris@441: "142211", # 74# Chris@441: "241211", # 75# Chris@441: "221114", # 76# Chris@441: "413111", # 77# Chris@441: "241112", # 78# Chris@441: "134111", # 79# Chris@441: "111242", # 80# Chris@441: "121142", # 81# Chris@441: "121241", # 82# Chris@441: "114212", # 83# Chris@441: "124112", # 84# Chris@441: "124211", # 85# Chris@441: "411212", # 86# Chris@441: "421112", # 87# Chris@441: "421211", # 88# Chris@441: "212141", # 89# Chris@441: "214121", # 90# Chris@441: "412121", # 91# Chris@441: "111143", # 92# Chris@441: "111341", # 93# Chris@441: "131141", # 94# Chris@441: "114113", # 95# Chris@441: "114311", # 96# Chris@441: "411113", # 97# Chris@441: "411311", # 98# Chris@441: "113141", # 99# Chris@441: "114131", # 100# Chris@441: "311141", # 101# Chris@441: "411131" # 102# Chris@441: ); Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns the character index. Chris@441: # @param char $char character. Chris@441: # @return int character index or -1 in case of error. Chris@441: # @access private Chris@441: # Chris@441: def GetCharIndex($char) Chris@441: for ($i=0;$i<64;$i++) Chris@441: if (@mChars[$i] == $char) Chris@441: return $i; Chris@441: end Chris@441: end Chris@441: return -1; Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns the bar size. Chris@441: # @param int $xres Horizontal resolution. Chris@441: # @param char $char Character. Chris@441: # @return int barcode size. Chris@441: # @access private Chris@441: # Chris@441: def GetBarSize($xres, $char) Chris@441: switch ($char) Chris@441: case '1' Chris@441: $cVal = BCD_C128_BAR_1; Chris@441: Chris@441: case '2' Chris@441: $cVal = BCD_C128_BAR_2; Chris@441: Chris@441: case '3' Chris@441: $cVal = BCD_C128_BAR_3; Chris@441: Chris@441: case '4' Chris@441: $cVal = BCD_C128_BAR_4; Chris@441: Chris@441: default Chris@441: $cVal = 0; Chris@441: end Chris@441: end Chris@441: return $cVal# $xres; Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns barcode size. Chris@441: # @param int $xres Horizontal resolution. Chris@441: # @return barcode size. Chris@441: # @access private Chris@441: # Chris@441: def GetSize($xres) Chris@441: $len = @mValue.length; Chris@441: Chris@441: if ($len == 0) { Chris@441: @mError = "Null value"; Chris@441: return false; Chris@441: end Chris@441: $ret = 0; Chris@441: for ($i=0;$i<$len;$i++) Chris@441: if (($id = GetCharIndex(@mValue[$i])) == -1) Chris@441: @mError = "C128A not include the char '".@mValue[$i]."'"; Chris@441: return false; Chris@441: else Chris@441: $cset = @mCharSet[$id]; Chris@441: $ret += GetBarSize($xres, $cset[0]); Chris@441: $ret += GetBarSize($xres, $cset[1]); Chris@441: $ret += GetBarSize($xres, $cset[2]); Chris@441: $ret += GetBarSize($xres, $cset[3]); Chris@441: $ret += GetBarSize($xres, $cset[4]); Chris@441: $ret += GetBarSize($xres, $cset[5]); Chris@441: end Chris@441: end Chris@441: Chris@441: # length of Check character# Chris@441: $cset = GetCheckCharValue(); Chris@441: $CheckSize = 0; Chris@441: for ($i=0;$i<6;$i++) Chris@441: $CheckSize += GetBarSize($cset[$i], $xres); Chris@441: end Chris@441: $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres; Chris@441: $StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres; Chris@441: return $StartSize + $ret + $CheckSize + $StopSize; Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns the check-char value. Chris@441: # @return string. Chris@441: # @access private Chris@441: # Chris@441: def GetCheckCharValue() Chris@441: $len = @mValue.length; Chris@441: $sum = 103; # 'A' type; Chris@441: for ($i=0;$i<$len;$i++) Chris@441: $sum += GetCharIndex(@mValue[$i])# ($i+1); Chris@441: end Chris@441: $check = $sum % 103; Chris@441: return @mCharSet[$check]; Chris@441: end Chris@441: Chris@441: # Chris@441: # Draws the start code. Chris@441: # @param int $DrawPos Drawing position. Chris@441: # @param int $yPos Vertical position. Chris@441: # @param int $ySize Vertical size. Chris@441: # @param int $xres Horizontal resolution. Chris@441: # @return int drawing position. Chris@441: # @access private Chris@441: # Chris@441: def DrawStart($DrawPos, $yPos, $ySize, $xres) Chris@441: # Start code is '211412'# Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); Chris@441: $DrawPos += GetBarSize('2', $xres); Chris@441: $DrawPos += GetBarSize('1', $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); Chris@441: $DrawPos += GetBarSize('1', $xres); Chris@441: $DrawPos += GetBarSize('4', $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); Chris@441: $DrawPos += GetBarSize('1', $xres); Chris@441: $DrawPos += GetBarSize('2', $xres); Chris@441: return $DrawPos; Chris@441: end Chris@441: Chris@441: # Chris@441: # Draws the stop code. Chris@441: # @param int $DrawPos Drawing position. Chris@441: # @param int $yPos Vertical position. Chris@441: # @param int $ySize Vertical size. Chris@441: # @param int $xres Horizontal resolution. Chris@441: # @return int drawing position. Chris@441: # @access private Chris@441: # Chris@441: def DrawStop($DrawPos, $yPos, $ySize, $xres) Chris@441: # Stop code is '2331112'# Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); Chris@441: $DrawPos += GetBarSize('2', $xres); Chris@441: $DrawPos += GetBarSize('3', $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize); Chris@441: $DrawPos += GetBarSize('3', $xres); Chris@441: $DrawPos += GetBarSize('1', $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); Chris@441: $DrawPos += GetBarSize('1', $xres); Chris@441: $DrawPos += GetBarSize('1', $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); Chris@441: $DrawPos += GetBarSize('2', $xres); Chris@441: return $DrawPos; Chris@441: end Chris@441: Chris@441: # Chris@441: # Draws the check-char code. Chris@441: # @param int $DrawPos Drawing position. Chris@441: # @param int $yPos Vertical position. Chris@441: # @param int $ySize Vertical size. Chris@441: # @param int $xres Horizontal resolution. Chris@441: # @return int drawing position. Chris@441: # @access private Chris@441: # Chris@441: def DrawCheckChar($DrawPos, $yPos, $ySize, $xres) Chris@441: $cset = GetCheckCharValue(); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize); Chris@441: $DrawPos += GetBarSize($cset[0], $xres); Chris@441: $DrawPos += GetBarSize($cset[1], $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize); Chris@441: $DrawPos += GetBarSize($cset[2], $xres); Chris@441: $DrawPos += GetBarSize($cset[3], $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize); Chris@441: $DrawPos += GetBarSize($cset[4], $xres); Chris@441: $DrawPos += GetBarSize($cset[5], $xres); Chris@441: return $DrawPos; Chris@441: end Chris@441: Chris@441: # Chris@441: # Draws the barcode object. Chris@441: # @param int $xres Horizontal resolution. Chris@441: # @return bool true in case of success. Chris@441: # Chris@441: def DrawObject($xres) Chris@441: $len = @mValue.length; Chris@441: if (($size = GetSize($xres))==0) Chris@441: return false; Chris@441: end Chris@441: Chris@441: if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2); Chris@441: elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size; Chris@441: else $sPos = 0; Chris@441: Chris@441: # Total height of bar code -Bars only-# Chris@441: if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont); Chris@441: else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2; Chris@441: Chris@441: # Draw text# Chris@441: if (@mStyle & BCS_DRAW_TEXT) Chris@441: if (@mStyle & BCS_STRETCH_TEXT) Chris@441: for ($i=0;$i<$len;$i++) Chris@441: @DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i, Chris@441: $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]); Chris@441: else# Center# Chris@441: $text_width = GetFontWidth(@mFont)# @mValue.length; Chris@441: @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres), Chris@441: $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue); Chris@441: end Chris@441: end Chris@441: Chris@441: $cPos = 0; Chris@441: $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); Chris@441: do { Chris@441: $c = GetCharIndex(@mValue[$cPos]); Chris@441: $cset = @mCharSet[$c]; Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize); Chris@441: $DrawPos += GetBarSize($cset[0], $xres); Chris@441: $DrawPos += GetBarSize($cset[1], $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize); Chris@441: $DrawPos += GetBarSize($cset[2], $xres); Chris@441: $DrawPos += GetBarSize($cset[3], $xres); Chris@441: @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize); Chris@441: $DrawPos += GetBarSize($cset[4], $xres); Chris@441: $DrawPos += GetBarSize($cset[5], $xres); Chris@441: $cPos += 1; Chris@441: end while ($cPos<$len); Chris@441: $DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); Chris@441: $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); Chris@441: return true; Chris@441: end Chris@441: } Chris@441: Chris@441: #============================================================+ Chris@441: # END OF FILE Chris@441: #============================================================+