|
|
|
#-- encoding: UTF-8
|
|
|
|
|
|
|
|
#============================================================+
|
|
|
|
# File name : c128cobject.rb
|
|
|
|
# Begin : 2002-07-31
|
|
|
|
# Last Update : 2004-12-29
|
|
|
|
# Author : Karim Mribti [barcode@mribti.com]
|
|
|
|
# : Sam Michaels [swampgas@swampgas.org]
|
|
|
|
# : 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 128-C Barcode Render Class for PHP using
|
|
|
|
# the GD graphics library.
|
|
|
|
# Code 128-C is numeric only and provides the
|
|
|
|
# most efficiency.
|
|
|
|
#
|
|
|
|
# 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 128-C Barcode Render Class for PHP using the GD graphics library.<br>
|
|
|
|
# Code 128-C is numeric only and provides the most efficiency.
|
|
|
|
# @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 128-C Barcode Render Class for PHP using the GD graphics library.<br>
|
|
|
|
# Code 128-C is numeric only and provides the most efficiency.
|
|
|
|
# @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 C128CObject 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 = array (
|
|
|
|
"00", "01", "02", "03", "04", "05", "06", "07", "08", "09",
|
|
|
|
"10", "11", "12", "13", "14", "15", "16", "17", "18", "19",
|
|
|
|
"20", "21", "22", "23", "24", "25", "26", "27", "28", "29",
|
|
|
|
"30", "31", "32", "33", "34", "35", "36", "37", "38", "39",
|
|
|
|
"40", "41", "42", "43", "44", "45", "46", "47", "48", "49",
|
|
|
|
"50", "51", "52", "53", "54", "55", "56", "57", "58", "59",
|
|
|
|
"60", "61", "62", "63", "64", "65", "66", "67", "68", "69",
|
|
|
|
"70", "71", "72", "73", "74", "75", "76", "77", "78", "79",
|
|
|
|
"80", "81", "82", "83", "84", "85", "86", "87", "88", "89",
|
|
|
|
"90", "91", "92", "93", "94", "95", "96", "97", "98", "99",
|
|
|
|
);
|
|
|
|
@mCharSet = array (
|
|
|
|
"212222", # 00#
|
|
|
|
"222122", # 01#
|
|
|
|
"222221", # 02#
|
|
|
|
"121223", # 03#
|
|
|
|
"121322", # 04#
|
|
|
|
"131222", # 05#
|
|
|
|
"122213", # 06#
|
|
|
|
"122312", # 07#
|
|
|
|
"132212", # 08#
|
|
|
|
"221213", # 09#
|
|
|
|
"221312", # 10#
|
|
|
|
"231212", # 11#
|
|
|
|
"112232", # 12#
|
|
|
|
"122132", # 13#
|
|
|
|
"122231", # 14#
|
|
|
|
"113222", # 15#
|
|
|
|
"123122", # 16#
|
|
|
|
"123221", # 17#
|
|
|
|
"223211", # 18#
|
|
|
|
"221132", # 19#
|
|
|
|
"221231", # 20#
|
|
|
|
"213212", # 21#
|
|
|
|
"223112", # 22#
|
|
|
|
"312131", # 23#
|
|
|
|
"311222", # 24#
|
|
|
|
"321122", # 25#
|
|
|
|
"321221", # 26#
|
|
|
|
"312212", # 27#
|
|
|
|
"322112", # 28#
|
|
|
|
"322211", # 29#
|
|
|
|
"212123", # 30#
|
|
|
|
"212321", # 31#
|
|
|
|
"232121", # 32#
|
|
|
|
"111323", # 33#
|
|
|
|
"131123", # 34#
|
|
|
|
"131321", # 35#
|
|
|
|
"112313", # 36#
|
|
|
|
"132113", # 37#
|
|
|
|
"132311", # 38#
|
|
|
|
"211313", # 39#
|
|
|
|
"231113", # 40#
|
|
|
|
"231311", # 41#
|
|
|
|
"112133", # 42#
|
|
|
|
"112331", # 43#
|
|
|
|
"132131", # 44#
|
|
|
|
"113123", # 45#
|
|
|
|
"113321", # 46#
|
|
|
|
"133121", # 47#
|
|
|
|
"313121", # 48#
|
|
|
|
"211331", # 49#
|
|
|
|
"231131", # 50#
|
|
|
|
"213113", # 51#
|
|
|
|
"213311", # 52#
|
|
|
|
"213131", # 53#
|
|
|
|
"311123", # 54#
|
|
|
|
"311321", # 55#
|
|
|
|
"331121", # 56#
|
|
|
|
"312113", # 57#
|
|
|
|
"312311", # 58#
|
|
|
|
"332111", # 59#
|
|
|
|
"314111", # 60#
|
|
|
|
"221411", # 61#
|
|
|
|
"431111", # 62#
|
|
|
|
"111224", # 63#
|
|
|
|
"111422", # 64#
|
|
|
|
"121124", # 65#
|
|
|
|
"121421", # 66#
|
|
|
|
"141122", # 67#
|
|
|
|
"141221", # 68#
|
|
|
|
"112214", # 69#
|
|
|
|
"112412", # 70#
|
|
|
|
"122114", # 71#
|
|
|
|
"122411", # 72#
|
|
|
|
"142112", # 73#
|
|
|
|
"142211", # 74#
|
|
|
|
"241211", # 75#
|
|
|
|
"221114", # 76#
|
|
|
|
"413111", # 77#
|
|
|
|
"241112", # 78#
|
|
|
|
"134111", # 79#
|
|
|
|
"111242", # 80#
|
|
|
|
"121142", # 81#
|
|
|
|
"121241", # 82#
|
|
|
|
"114212", # 83#
|
|
|
|
"124112", # 84#
|
|
|
|
"124211", # 85#
|
|
|
|
"411212", # 86#
|
|
|
|
"421112", # 87#
|
|
|
|
"421211", # 88#
|
|
|
|
"212141", # 89#
|
|
|
|
"214121", # 90#
|
|
|
|
"412121", # 91#
|
|
|
|
"111143", # 92#
|
|
|
|
"111341", # 93#
|
|
|
|
"131141", # 94#
|
|
|
|
"114113", # 95#
|
|
|
|
"114311", # 96#
|
|
|
|
"411113", # 97#
|
|
|
|
"411311", # 98#
|
|
|
|
"113141", # 99#
|
|
|
|
);
|
|
|
|
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<100;$i++)
|
|
|
|
if (@mChars[$i] == $char)
|
|
|
|
return $i;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return -1;
|
|
|
|
end
|
|
|
|
|
|
|
|
#
|
|
|
|
# Returns the bar size.
|
|
|
|
# @param int $xres Horizontal resolution.
|
|
|
|
# @param char $char Character.
|
|
|
|
# @return int barcode size.
|
|
|
|
# @access private
|
|
|
|
#
|
|
|
|
def GetBarSize($xres, $char)
|
|
|
|
switch ($char)
|
|
|
|
case '1'
|
|
|
|
$cVal = BCD_C128_BAR_1;
|
|
|
|
|
|
|
|
case '2'
|
|
|
|
$cVal = BCD_C128_BAR_2;
|
|
|
|
|
|
|
|
case '3'
|
|
|
|
$cVal = BCD_C128_BAR_3;
|
|
|
|
|
|
|
|
case '4'
|
|
|
|
$cVal = BCD_C128_BAR_4;
|
|
|
|
|
|
|
|
default
|
|
|
|
$cVal = 0;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
return $cVal# $xres;
|
|
|
|
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
|
|
|
|
$ret = 0;
|
|
|
|
|
|
|
|
for ($i=0;$i<$len;$i++)
|
|
|
|
if ((@mValue[$i][0] < 48) || (@mValue[$i][0] > 57))
|
|
|
|
@mError = "Code-128C is numeric only";
|
|
|
|
return false;
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if (($len%2) != 0)
|
|
|
|
@mError = "The length of barcode value must be even. You must pad the number with zeros.";
|
|
|
|
return false;
|
|
|
|
end
|
|
|
|
|
|
|
|
for ($i=0;$i<$len;$i+=2)
|
|
|
|
$id = GetCharIndex(@mValue[$i].@mValue[$i+1]);
|
|
|
|
$cset = @mCharSet[$id];
|
|
|
|
$ret += GetBarSize($xres, $cset[0]);
|
|
|
|
$ret += GetBarSize($xres, $cset[1]);
|
|
|
|
$ret += GetBarSize($xres, $cset[2]);
|
|
|
|
$ret += GetBarSize($xres, $cset[3]);
|
|
|
|
$ret += GetBarSize($xres, $cset[4]);
|
|
|
|
$ret += GetBarSize($xres, $cset[5]);
|
|
|
|
end
|
|
|
|
# length of Check character#
|
|
|
|
$cset = GetCheckCharValue();
|
|
|
|
$CheckSize = 0;
|
|
|
|
for ($i=0;$i<6;$i++)
|
|
|
|
$CheckSize += GetBarSize($cset[$i], $xres);
|
|
|
|
end
|
|
|
|
|
|
|
|
$StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres;
|
|
|
|
$StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres;
|
|
|
|
return $StartSize + $ret + $CheckSize + $StopSize;
|
|
|
|
end
|
|
|
|
|
|
|
|
#
|
|
|
|
# Returns the check-char value.
|
|
|
|
# @return string.
|
|
|
|
# @access private
|
|
|
|
#
|
|
|
|
def GetCheckCharValue()
|
|
|
|
$len = @mValue.length;
|
|
|
|
$sum = 105; # 'C' type;
|
|
|
|
$m = 0;
|
|
|
|
for ($i=0;$i<$len;$i+=2)
|
|
|
|
$m += 1;
|
|
|
|
$sum += GetCharIndex(@mValue[$i].@mValue[$i+1])# $m;
|
|
|
|
end
|
|
|
|
$check = $sum % 103;
|
|
|
|
return @mCharSet[$check];
|
|
|
|
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 '211232'#
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize('2', $xres);
|
|
|
|
$DrawPos += GetBarSize('1', $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize('1', $xres);
|
|
|
|
$DrawPos += GetBarSize('2', $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize('3', $xres);
|
|
|
|
$DrawPos += GetBarSize('2', $xres);
|
|
|
|
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 '2331112'#
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize('2', $xres);
|
|
|
|
$DrawPos += GetBarSize('3', $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize('3', $xres);
|
|
|
|
$DrawPos += GetBarSize('1', $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize('1', $xres);
|
|
|
|
$DrawPos += GetBarSize('1', $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize('2', $xres);
|
|
|
|
return $DrawPos;
|
|
|
|
end
|
|
|
|
|
|
|
|
#
|
|
|
|
# Draws the check-char 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 DrawCheckChar($DrawPos, $yPos, $ySize, $xres)
|
|
|
|
$cset = GetCheckCharValue();
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize($cset[0], $xres);
|
|
|
|
$DrawPos += GetBarSize($cset[1], $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize($cset[2], $xres);
|
|
|
|
$DrawPos += GetBarSize($cset[3], $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize);
|
|
|
|
$DrawPos += GetBarSize($cset[4], $xres);
|
|
|
|
$DrawPos += GetBarSize($cset[5], $xres);
|
|
|
|
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;
|
|
|
|
if (($size = GetSize($xres))==0)
|
|
|
|
return false;
|
|
|
|
end
|
|
|
|
|
|
|
|
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+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($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)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres),
|
|
|
|
$ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
$cPos = 0;
|
|
|
|
$DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
|
|
|
|
do {
|
|
|
|
$c = GetCharIndex(@mValue[$cPos].@mValue[$cPos+1]);
|
|
|
|
$cset = @mCharSet[$c];
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize);
|
|
|
|
$DrawPos += GetBarSize($cset[0], $xres);
|
|
|
|
$DrawPos += GetBarSize($cset[1], $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize);
|
|
|
|
$DrawPos += GetBarSize($cset[2], $xres);
|
|
|
|
$DrawPos += GetBarSize($cset[3], $xres);
|
|
|
|
@DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize);
|
|
|
|
$DrawPos += GetBarSize($cset[4], $xres);
|
|
|
|
$DrawPos += GetBarSize($cset[5], $xres);
|
|
|
|
$cPos += 2;
|
|
|
|
end while ($cPos<$len);
|
|
|
|
$DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
|
|
|
|
$DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres);
|
|
|
|
return true;
|
|
|
|
end
|
|
|
|
}
|
|
|
|
|
|
|
|
#============================================================+
|
|
|
|
# END OF FILE
|
|
|
|
#============================================================+
|
|
|
|
|