c39object.rb
281 lines
| 8.7 KiB
| text/x-ruby
|
RubyLexer
|
r5127 | |||
#============================================================+ | ||||
# 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 | ||||
#============================================================+ | ||||