Chris@441: Chris@441: #============================================================+ Chris@441: # File name : barcode.rb Chris@441: # Begin : 2002-07-31 Chris@441: # Last Update : 2005-01-02 Chris@441: # Author : Karim Mribti [barcode@mribti.com] Chris@441: # Version : 1.1 [0.0.8a (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 : Generic Barcode Render Class for PHP using Chris@441: # the GD graphics library. 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: # - $mCharSet and $mChars variables were added here Chris@441: #============================================================+ Chris@441: Chris@441: # Chris@441: # Barcode Render Class for PHP using the GD graphics library. 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: # Styles Chris@441: # Global Chris@441: Chris@441: # Chris@441: # option: generate barcode border Chris@441: # Chris@441: define("BCS_BORDER", 1); Chris@441: Chris@441: # Chris@441: # option: use transparent background Chris@441: # Chris@441: define("BCS_TRANSPARENT", 2); Chris@441: Chris@441: # Chris@441: # option: center barcode Chris@441: # Chris@441: define("BCS_ALIGN_CENTER", 4); Chris@441: Chris@441: # Chris@441: # option: align left Chris@441: # Chris@441: define("BCS_ALIGN_LEFT", 8); Chris@441: Chris@441: # Chris@441: # option: align right Chris@441: # Chris@441: define("BCS_ALIGN_RIGHT", 16); Chris@441: Chris@441: # Chris@441: # option: generate JPEG image Chris@441: # Chris@441: define("BCS_IMAGE_JPEG", 32); Chris@441: Chris@441: # Chris@441: # option: generate PNG image Chris@441: # Chris@441: define("BCS_IMAGE_PNG", 64); Chris@441: Chris@441: # Chris@441: # option: draw text Chris@441: # Chris@441: define("BCS_DRAW_TEXT", 128); Chris@441: Chris@441: # Chris@441: # option: stretch text Chris@441: # Chris@441: define("BCS_STRETCH_TEXT", 256); Chris@441: Chris@441: # Chris@441: # option: reverse color Chris@441: # Chris@441: define("BCS_REVERSE_COLOR", 512); Chris@441: Chris@441: # Chris@441: # option: draw check Chris@441: # (only for I25 code) Chris@441: # Chris@441: define("BCS_I25_DRAW_CHECK", 2048); Chris@441: Chris@441: # Chris@441: # set default background color Chris@441: # Chris@441: define("BCD_DEFAULT_BACKGROUND_COLOR", 0xFFFFFF); Chris@441: Chris@441: # Chris@441: # set default foreground color Chris@441: # Chris@441: define("BCD_DEFAULT_FOREGROUND_COLOR", 0x000000); Chris@441: Chris@441: # Chris@441: # set default style options Chris@441: # Chris@441: define("BCD_DEFAULT_STYLE", BCS_BORDER | BCS_ALIGN_CENTER | BCS_IMAGE_PNG); Chris@441: Chris@441: # Chris@441: # set default width Chris@441: # Chris@441: define("BCD_DEFAULT_WIDTH", 460); Chris@441: Chris@441: # Chris@441: # set default height Chris@441: # Chris@441: define("BCD_DEFAULT_HEIGHT", 120); Chris@441: Chris@441: # Chris@441: # set default font Chris@441: # Chris@441: define("BCD_DEFAULT_FONT", 5); Chris@441: Chris@441: # Chris@441: # st default horizontal resolution Chris@441: # Chris@441: define("BCD_DEFAULT_XRES", 2); Chris@441: Chris@441: # Margins Chris@441: Chris@441: # Chris@441: # set default margin Chris@441: # Chris@441: define("BCD_DEFAULT_MAR_Y1", 0); Chris@441: Chris@441: # Chris@441: # set default margin Chris@441: # Chris@441: define("BCD_DEFAULT_MAR_Y2", 0); Chris@441: Chris@441: # Chris@441: # set default text offset Chris@441: # Chris@441: define("BCD_DEFAULT_TEXT_OFFSET", 2); Chris@441: Chris@441: # For the I25 Only Chris@441: Chris@441: # Chris@441: # narrow bar option Chris@441: # (only for I25 code) Chris@441: # Chris@441: define("BCD_I25_NARROW_BAR", 1); Chris@441: Chris@441: # Chris@441: # wide bar option Chris@441: # (only for I25 code) Chris@441: # Chris@441: define("BCD_I25_WIDE_BAR", 2); Chris@441: Chris@441: # For the C39 Only Chris@441: Chris@441: # Chris@441: # narrow bar option Chris@441: # (only for c39 code) Chris@441: # Chris@441: define("BCD_C39_NARROW_BAR", 1); Chris@441: Chris@441: # Chris@441: # wide bar option Chris@441: # (only for c39 code) Chris@441: # Chris@441: define("BCD_C39_WIDE_BAR", 2); Chris@441: Chris@441: # For Code 128 Chris@441: Chris@441: # Chris@441: # set type 1 bar Chris@441: # (only for c128 code) Chris@441: # Chris@441: define("BCD_C128_BAR_1", 1); Chris@441: Chris@441: # Chris@441: # set type 2 bar Chris@441: # (only for c128 code) Chris@441: # Chris@441: define("BCD_C128_BAR_2", 2); Chris@441: Chris@441: # Chris@441: # set type 3 bar Chris@441: # (only for c128 code) Chris@441: # Chris@441: define("BCD_C128_BAR_3", 3); Chris@441: Chris@441: # Chris@441: # set type 4 bar Chris@441: # (only for c128 code) Chris@441: # Chris@441: define("BCD_C128_BAR_4", 4); Chris@441: Chris@441: # Chris@441: # Barcode Render Class for PHP using the GD graphics library. 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 BarcodeObject { Chris@441: # Chris@441: # @var Image width in pixels. Chris@441: # @access protected Chris@441: # Chris@441: protected $mWidth; Chris@441: Chris@441: # Chris@441: # @var Image height in pixels. Chris@441: # @access protected Chris@441: # Chris@441: protected $mHeight; Chris@441: Chris@441: # Chris@441: # @var Numeric code for Barcode style. Chris@441: # @access protected Chris@441: # Chris@441: protected $mStyle; Chris@441: Chris@441: # Chris@441: # @var Background color. Chris@441: # @access protected Chris@441: # Chris@441: protected $mBgcolor; Chris@441: Chris@441: # Chris@441: # @var Brush color. Chris@441: # @access protected Chris@441: # Chris@441: protected $mBrush; Chris@441: Chris@441: # Chris@441: # @var Image object. Chris@441: # @access protected Chris@441: # Chris@441: protected $mImg; Chris@441: Chris@441: # Chris@441: # @var Numeric code for character font. Chris@441: # @access protected Chris@441: # Chris@441: protected $mFont; Chris@441: Chris@441: # Chris@441: # @var Error message. Chris@441: # @access protected Chris@441: # Chris@441: protected $mError; Chris@441: Chris@441: # Chris@441: # @var Character Set. Chris@441: # @access protected Chris@441: # Chris@441: protected $mCharSet; Chris@441: Chris@441: # Chris@441: # @var Allowed symbols. Chris@441: # @access protected Chris@441: # Chris@441: protected $mChars; 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: # Chris@441: def __construct($Width=BCD_DEFAULT_WIDTH, $Height=BCD_DEFAULT_HEIGHT, $Style=BCD_DEFAULT_STYLE) Chris@441: @mWidth = $Width; Chris@441: @mHeight = $Height; Chris@441: @mStyle = $Style; Chris@441: @mFont = BCD_DEFAULT_FONT; Chris@441: @mImg = ImageCreate(@mWidth, @mHeight); Chris@441: $dbColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_FOREGROUND_COLOR : BCD_DEFAULT_BACKGROUND_COLOR; Chris@441: $dfColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_BACKGROUND_COLOR : BCD_DEFAULT_FOREGROUND_COLOR; Chris@441: @mBgcolor = ImageColorAllocate(@mImg, ($dbColor & 0xFF0000) >> 16, Chris@441: ($dbColor & 0x00FF00) >> 8, $dbColor & 0x0000FF); Chris@441: @mBrush = ImageColorAllocate(@mImg, ($dfColor & 0xFF0000) >> 16, Chris@441: ($dfColor & 0x00FF00) >> 8, $dfColor & 0x0000FF); Chris@441: if (!(@mStyle & BCS_TRANSPARENT)) Chris@441: ImageFill(@mImg, @mWidth, @mHeight, @mBgcolor); Chris@441: end Chris@441: end Chris@441: Chris@441: # Chris@441: # Class Destructor. Chris@441: # Destroy image object. Chris@441: # Chris@441: def __destructor() Chris@441: @DestroyObject(); Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns the image object. Chris@441: # @return object image. Chris@441: # @author Nicola Asuni Chris@441: # @since 1.5.2 Chris@441: # Chris@441: def getImage() Chris@441: return @mImg; Chris@441: end Chris@441: Chris@441: # Chris@441: # Abstract method used to draw the barcode image. Chris@441: # @param int $xres Horizontal resolution. Chris@441: # Chris@441: def DrawObject($xres) { Chris@441: # there is not implementation neded, is simply the asbsract function.# Chris@441: return false; Chris@441: end Chris@441: Chris@441: # Chris@441: # Draws the barcode border. Chris@441: # @access protected Chris@441: # Chris@441: protected function DrawBorder() Chris@441: ImageRectangle(@mImg, 0, 0, @mWidth-1, @mHeight-1, @mBrush); Chris@441: end Chris@441: Chris@441: # Chris@441: # Draws the alphanumeric code. Chris@441: # @param int $Font Font type. Chris@441: # @param int $xPos Horiziontal position. Chris@441: # @param int $yPos Vertical position. Chris@441: # @param int $Char Alphanumeric code to write. Chris@441: # @access protected Chris@441: # Chris@441: protected function DrawChar($Font, $xPos, $yPos, $Char) Chris@441: ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush); Chris@441: end Chris@441: Chris@441: # Chris@441: # Draws a character string. Chris@441: # @param int $Font Font type. Chris@441: # @param int $xPos Horiziontal position. Chris@441: # @param int $yPos Vertical position. Chris@441: # @param int $Char string to write. Chris@441: # @access protected Chris@441: # Chris@441: protected function DrawText($Font, $xPos, $yPos, $Char) Chris@441: ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush); Chris@441: end Chris@441: Chris@441: # Chris@441: # Draws a single barcode bar. Chris@441: # @param int $xPos Horiziontal position. Chris@441: # @param int $yPos Vertical position. Chris@441: # @param int $xSize Horizontal size. Chris@441: # @param int $xSize Vertical size. Chris@441: # @return bool trur in case of success, false otherwise. Chris@441: # @access protected Chris@441: # Chris@441: protected function DrawSingleBar($xPos, $yPos, $xSize, $ySize) Chris@441: if ($xPos>=0 && $xPos<=@mWidth && ($xPos+$xSize)<=@mWidth && Chris@441: $yPos>=0 && $yPos<=@mHeight && ($yPos+$ySize)<=@mHeight) Chris@441: for ($i=0;$i<$xSize;$i++) Chris@441: ImageLine(@mImg, $xPos+$i, $yPos, $xPos+$i, $yPos+$ySize, @mBrush); Chris@441: end Chris@441: return true; Chris@441: end Chris@441: return false; Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns the current error message. Chris@441: # @return string error message. Chris@441: # Chris@441: def GetError() Chris@441: return @mError; Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns the font height. Chris@441: # @param int $font font type. Chris@441: # @return int font height. Chris@441: # Chris@441: def GetFontHeight($font) Chris@441: return ImageFontHeight($font); Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns the font width. Chris@441: # @param int $font font type. Chris@441: # @return int font width. Chris@441: # Chris@441: def GetFontWidth($font) Chris@441: return ImageFontWidth($font); Chris@441: end Chris@441: Chris@441: # Chris@441: # Set font type. Chris@441: # @param int $font font type. Chris@441: # Chris@441: def SetFont($font) Chris@441: @mFont = $font; Chris@441: end Chris@441: Chris@441: # Chris@441: # Returns barcode style. Chris@441: # @return int barcode style. Chris@441: # Chris@441: def GetStyle() Chris@441: return @mStyle; Chris@441: end Chris@441: Chris@441: # Chris@441: # Set barcode style. Chris@441: # @param int $Style barcode style. Chris@441: # Chris@441: def SetStyle ($Style) Chris@441: @mStyle = $Style; Chris@441: end Chris@441: Chris@441: # Chris@441: # Flush the barcode image. Chris@441: # Chris@441: def FlushObject() Chris@441: if ((@mStyle & BCS_BORDER)) Chris@441: @DrawBorder(); Chris@441: end Chris@441: if (@mStyle & BCS_IMAGE_PNG) Chris@441: Header("Content-Type: image/png"); Chris@441: ImagePng(@mImg); Chris@441: elsif (@mStyle & BCS_IMAGE_JPEG) Chris@441: Header("Content-Type: image/jpeg"); Chris@441: ImageJpeg(@mImg); Chris@441: end Chris@441: end Chris@441: Chris@441: # Chris@441: # Destroy the barcode image. Chris@441: # Chris@441: def DestroyObject() Chris@441: ImageDestroy(@mImg); Chris@441: end Chris@441: } Chris@441: Chris@441: #============================================================+ Chris@441: # END OF FILE Chris@441: #============================================================+