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