Mercurial > hg > soundsoftware-site
diff vendor/plugins/rfpdf/lib/barcode/c39object.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/c39object.rb Mon Jun 06 14:24:13 2011 +0100 @@ -0,0 +1,281 @@ + +#============================================================+ +# File name : c39object.rb +# Begin : 2002-07-31 +# Last Update : 2004-12-29 +# Author : Karim Mribti [barcode@mribti.com] +# : Nicola Asuni [info@tecnick.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 39 Barcode Render Class for PHP using +# the GD graphics library. +# Code 39 is an alphanumeric bar code that can +# encode decimal number, case alphabet and some +# special symbols. +# +# 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 39 Barcode Render Class.<br> +# Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols. +# @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 39 Barcode Render Class.<br> +# Code 39 is an alphanumeric bar code that can encode decimal number, case alphabet and some special symbols. +# @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 C39Object 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 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-.#$/+%"; + @mCharSet = array ( + # 0 # "000110100", + # 1 # "100100001", + # 2 # "001100001", + # 3 # "101100000", + # 4 # "000110001", + # 5 # "100110000", + # 6 # "001110000", + # 7 # "000100101", + # 8 # "100100100", + # 9 # "001100100", + # A # "100001001", + # B # "001001001", + # C # "101001000", + # D # "000011001", + # E # "100011000", + # F # "001011000", + # G # "000001101", + # H # "100001100", + # I # "001001100", + # J # "000011100", + # K # "100000011", + # L # "001000011", + # M # "101000010", + # N # "000010011", + # O # "100010010", + # P # "001010010", + # Q # "000000111", + # R # "100000110", + # S # "001000110", + # T # "000010110", + # U # "110000001", + # V # "011000001", + # W # "111000000", + # X # "010010001", + # Y # "110010000", + # Z # "011010000", + # - # "010000101", + # . # "110000100", + # SP# "011000100", + /*# # "010010100", + # $ # "010101000", + # / # "010100010", + # + # "010001010", + # % # "000101010" + ); + 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<44;$i++) + if (@mChars[$i] == $char) + return $i; + end + end + return -1; + 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 + + for ($i=0;$i<$len;$i++) + if (GetCharIndex(@mValue[$i]) == -1 || @mValue[$i] == '*') + # The asterisk is only used as a start and stop code# + @mError = "C39 not include the char '".@mValue[$i]."'"; + return false; + end + end + + # Start, Stop is 010010100 == '*' # + $StartSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3; + $StopSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3; + $CharSize = BCD_C39_NARROW_BAR# $xres# 6 + BCD_C39_WIDE_BAR# $xres# 3; # Same for all chars# + + return $CharSize# $len + $StartSize + $StopSize + # Space between chars# BCD_C39_NARROW_BAR# $xres# ($len-1); + 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 '*'# + $narrow = BCD_C39_NARROW_BAR# $xres; + $wide = BCD_C39_WIDE_BAR# $xres; + @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize); + $DrawPos += $narrow; + $DrawPos += $wide; + @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize); + $DrawPos += $narrow; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $wide , $ySize); + $DrawPos += $wide; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $wide , $ySize); + $DrawPos += $wide; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $narrow, $ySize); + $DrawPos += $narrow; + $DrawPos += $narrow; # Space between chars# + 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 '*'# + $narrow = BCD_C39_NARROW_BAR# $xres; + $wide = BCD_C39_WIDE_BAR# $xres; + @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize); + $DrawPos += $narrow; + $DrawPos += $wide; + @DrawSingleBar($DrawPos, $yPos, $narrow , $ySize); + $DrawPos += $narrow; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $wide , $ySize); + $DrawPos += $wide; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $wide , $ySize); + $DrawPos += $wide; + $DrawPos += $narrow; + @DrawSingleBar($DrawPos, $yPos, $narrow, $ySize); + $DrawPos += $narrow; + 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; + + $narrow = BCD_C39_NARROW_BAR# $xres; + $wide = BCD_C39_WIDE_BAR# $xres; + + if (($size = GetSize($xres))==0) + return false; + end + + $cPos = 0; + 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+($narrow*6+$wide*3)+($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)+($narrow*6+$wide*3), + $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue); + end + end + + $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + do { + $c = GetCharIndex(@mValue[$cPos]); + $cset = @mCharSet[$c]; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[0] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[0] == '0') ? $narrow : $wide; + $DrawPos += ($cset[1] == '0') ? $narrow : $wide; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[2] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[2] == '0') ? $narrow : $wide; + $DrawPos += ($cset[3] == '0') ? $narrow : $wide; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[4] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[4] == '0') ? $narrow : $wide; + $DrawPos += ($cset[5] == '0') ? $narrow : $wide; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[6] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[6] == '0') ? $narrow : $wide; + $DrawPos += ($cset[7] == '0') ? $narrow : $wide; + @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, ($cset[8] == '0') ? $narrow : $wide , $ysize); + $DrawPos += ($cset[8] == '0') ? $narrow : $wide; + $DrawPos += $narrow; # Space between chars# + $cPos += 1; + end while ($cPos<$len); + $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); + return true; + end +} + +#============================================================+ +# END OF FILE +#============================================================+