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