#============================================================+ # 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.
# 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.
# 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 #============================================================+