annotate vendor/plugins/rfpdf/lib/barcode/i25object.rb @ 1172:60d42b9850d2 bug_367

Close obsolete branch bug_367
author Chris Cannam
date Fri, 03 Feb 2012 15:20:50 +0000
parents cbce1fd3b1b7
children
rev   line source
Chris@441 1
Chris@441 2 #============================================================+
Chris@441 3 # File name : i25aobject.rb
Chris@441 4 # Begin : 2002-07-31
Chris@441 5 # Last Update : 2004-12-29
Chris@441 6 # Author : Karim Mribti [barcode@mribti.com]
Chris@441 7 # : Nicola Asuni [info@tecnick.com]
Chris@441 8 # Version : 0.0.8a 2001-04-01 (original code)
Chris@441 9 # License : GNU LGPL (Lesser General Public License) 2.1
Chris@441 10 # http://www.gnu.org/copyleft/lesser.txt
Chris@441 11 # Source Code : http://www.mribti.com/barcode/
Chris@441 12 #
Chris@441 13 # Description : I25 Barcode Render Class for PHP using
Chris@441 14 # the GD graphics library.
Chris@441 15 # Interleaved 2 of 5 is a numeric only bar code
Chris@441 16 # with a optional check number.
Chris@441 17 #
Chris@441 18 # NOTE:
Chris@441 19 # This version contains changes by Nicola Asuni:
Chris@441 20 # - porting to Ruby
Chris@441 21 # - code style and formatting
Chris@441 22 # - automatic php documentation in PhpDocumentor Style
Chris@441 23 # (www.phpdoc.org)
Chris@441 24 # - minor bug fixing
Chris@441 25 #============================================================+
Chris@441 26
Chris@441 27 #
Chris@441 28 # I25 Barcode Render Class for PHP using the GD graphics library.<br<
Chris@441 29 # Interleaved 2 of 5 is a numeric only bar code with a optional check number.
Chris@441 30 # @author Karim Mribti, Nicola Asuni
Chris@441 31 # @name BarcodeObject
Chris@441 32 # @package com.tecnick.tcpdf
Chris@441 33 # @@version 0.0.8a 2001-04-01 (original code)
Chris@441 34 # @since 2001-03-25
Chris@441 35 # @license http://www.gnu.org/copyleft/lesser.html LGPL
Chris@441 36 #
Chris@441 37
Chris@441 38 #
Chris@441 39 # I25 Barcode Render Class for PHP using the GD graphics library.<br<
Chris@441 40 # Interleaved 2 of 5 is a numeric only bar code with a optional check number.
Chris@441 41 # @author Karim Mribti, Nicola Asuni
Chris@441 42 # @name BarcodeObject
Chris@441 43 # @package com.tecnick.tcpdf
Chris@441 44 # @@version 0.0.8a 2001-04-01 (original code)
Chris@441 45 # @since 2001-03-25
Chris@441 46 # @license http://www.gnu.org/copyleft/lesser.html LGPL
Chris@441 47 #
Chris@441 48 class I25Object extends BarcodeObject {
Chris@441 49
Chris@441 50 #
Chris@441 51 # Class Constructor.
Chris@441 52 # @param int $Width Image width in pixels.
Chris@441 53 # @param int $Height Image height in pixels.
Chris@441 54 # @param int $Style Barcode style.
Chris@441 55 # @param int $Value value to print on barcode.
Chris@441 56 #
Chris@441 57 def __construct($Width, $Height, $Style, $Value)
Chris@441 58 parent::__construct($Width, $Height, $Style);
Chris@441 59 @mValue = $Value;
Chris@441 60 @mCharSet = array (
Chris@441 61 # 0# "00110",
Chris@441 62 # 1# "10001",
Chris@441 63 # 2# "01001",
Chris@441 64 # 3# "11000",
Chris@441 65 # 4# "00101",
Chris@441 66 # 5# "10100",
Chris@441 67 # 6# "01100",
Chris@441 68 # 7# "00011",
Chris@441 69 # 8# "10010",
Chris@441 70 # 9# "01010"
Chris@441 71 );
Chris@441 72 end
Chris@441 73
Chris@441 74 #
Chris@441 75 # Returns barcode size.
Chris@441 76 # @param int $xres Horizontal resolution.
Chris@441 77 # @return barcode size.
Chris@441 78 # @access private
Chris@441 79 #
Chris@441 80 def GetSize($xres)
Chris@441 81 $len = @mValue.length;
Chris@441 82
Chris@441 83 if ($len == 0) {
Chris@441 84 @mError = "Null value";
Chris@441 85 return false;
Chris@441 86 end
Chris@441 87
Chris@441 88 for ($i=0;$i<$len;$i++)
Chris@441 89 if ((@mValue[$i][0] < 48) || (@mValue[$i][0] > 57))
Chris@441 90 @mError = "I25 is numeric only";
Chris@441 91 return false;
Chris@441 92 end
Chris@441 93 end
Chris@441 94
Chris@441 95 if (($len%2) != 0)
Chris@441 96 @mError = "The length of barcode value must be even";
Chris@441 97 return false;
Chris@441 98 end
Chris@441 99 $StartSize = BCD_I25_NARROW_BAR# 4 # $xres;
Chris@441 100 $StopSize = BCD_I25_WIDE_BAR# $xres + 2# BCD_I25_NARROW_BAR# $xres;
Chris@441 101 $cPos = 0;
Chris@441 102 $sPos = 0;
Chris@441 103 do {
Chris@441 104 $c1 = @mValue[$cPos];
Chris@441 105 $c2 = @mValue[$cPos+1];
Chris@441 106 $cset1 = @mCharSet[$c1];
Chris@441 107 $cset2 = @mCharSet[$c2];
Chris@441 108
Chris@441 109 for ($i=0;$i<5;$i++)
Chris@441 110 $type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres);
Chris@441 111 $type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR # $xres) : (BCD_I25_WIDE_BAR# $xres);
Chris@441 112 $sPos += ($type1 + $type2);
Chris@441 113 end
Chris@441 114 $cPos+=2;
Chris@441 115 end while ($cPos<$len);
Chris@441 116
Chris@441 117 return $sPos + $StartSize + $StopSize;
Chris@441 118 end
Chris@441 119
Chris@441 120 #
Chris@441 121 # Draws the start code.
Chris@441 122 # @param int $DrawPos Drawing position.
Chris@441 123 # @param int $yPos Vertical position.
Chris@441 124 # @param int $ySize Vertical size.
Chris@441 125 # @param int $xres Horizontal resolution.
Chris@441 126 # @return int drawing position.
Chris@441 127 # @access private
Chris@441 128 #
Chris@441 129 def DrawStart($DrawPos, $yPos, $ySize, $xres)
Chris@441 130 # Start code is "0000"#
Chris@441 131 @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
Chris@441 132 $DrawPos += BCD_I25_NARROW_BAR # $xres;
Chris@441 133 $DrawPos += BCD_I25_NARROW_BAR # $xres;
Chris@441 134 @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
Chris@441 135 $DrawPos += BCD_I25_NARROW_BAR # $xres;
Chris@441 136 $DrawPos += BCD_I25_NARROW_BAR # $xres;
Chris@441 137 return $DrawPos;
Chris@441 138 end
Chris@441 139
Chris@441 140 #
Chris@441 141 # Draws the stop code.
Chris@441 142 # @param int $DrawPos Drawing position.
Chris@441 143 # @param int $yPos Vertical position.
Chris@441 144 # @param int $ySize Vertical size.
Chris@441 145 # @param int $xres Horizontal resolution.
Chris@441 146 # @return int drawing position.
Chris@441 147 # @access private
Chris@441 148 #
Chris@441 149 def DrawStop($DrawPos, $yPos, $ySize, $xres)
Chris@441 150 # Stop code is "100"#
Chris@441 151 @DrawSingleBar($DrawPos, $yPos, BCD_I25_WIDE_BAR# $xres , $ySize);
Chris@441 152 $DrawPos += BCD_I25_WIDE_BAR # $xres;
Chris@441 153 $DrawPos += BCD_I25_NARROW_BAR # $xres;
Chris@441 154 @DrawSingleBar($DrawPos, $yPos, BCD_I25_NARROW_BAR # $xres , $ySize);
Chris@441 155 $DrawPos += BCD_I25_NARROW_BAR # $xres;
Chris@441 156 return $DrawPos;
Chris@441 157 end
Chris@441 158
Chris@441 159 #
Chris@441 160 # Draws the barcode object.
Chris@441 161 # @param int $xres Horizontal resolution.
Chris@441 162 # @return bool true in case of success.
Chris@441 163 #
Chris@441 164 def DrawObject($xres)
Chris@441 165 $len = @mValue.length;
Chris@441 166
Chris@441 167 if (($size = GetSize($xres))==0)
Chris@441 168 return false;
Chris@441 169 end
Chris@441 170
Chris@441 171 $cPos = 0;
Chris@441 172
Chris@441 173 if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont);
Chris@441 174 else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2;
Chris@441 175
Chris@441 176 if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2);
Chris@441 177 elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size;
Chris@441 178 else $sPos = 0;
Chris@441 179
Chris@441 180 if (@mStyle & BCS_DRAW_TEXT)
Chris@441 181 if (@mStyle & BCS_STRETCH_TEXT)
Chris@441 182 # Stretch#
Chris@441 183 for ($i=0;$i<$len;$i++)
Chris@441 184 @DrawChar(@mFont, $sPos+BCD_I25_NARROW_BAR*4*$xres+($size/$len)*$i,
Chris@441 185 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET , @mValue[$i]);
Chris@441 186 end
Chris@441 187 endelse# Center#
Chris@441 188 $text_width = GetFontWidth(@mFont) * @mValue.length;
Chris@441 189 @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(BCD_I25_NARROW_BAR*4*$xres),
Chris@441 190 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue);
Chris@441 191 end
Chris@441 192 end
Chris@441 193
Chris@441 194 $sPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres);
Chris@441 195 do {
Chris@441 196 $c1 = @mValue[$cPos];
Chris@441 197 $c2 = @mValue[$cPos+1];
Chris@441 198 $cset1 = @mCharSet[$c1];
Chris@441 199 $cset2 = @mCharSet[$c2];
Chris@441 200
Chris@441 201 for ($i=0;$i<5;$i++)
Chris@441 202 $type1 = ($cset1[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres);
Chris@441 203 $type2 = ($cset2[$i]==0) ? (BCD_I25_NARROW_BAR# $xres) : (BCD_I25_WIDE_BAR# $xres);
Chris@441 204 @DrawSingleBar($sPos, BCD_DEFAULT_MAR_Y1, $type1 , $ysize);
Chris@441 205 $sPos += ($type1 + $type2);
Chris@441 206 end
Chris@441 207 $cPos+=2;
Chris@441 208 end while ($cPos<$len);
Chris@441 209 $sPos = @DrawStop($sPos, BCD_DEFAULT_MAR_Y1, $ysize, $xres);
Chris@441 210 return true;
Chris@441 211 end
Chris@441 212 }
Chris@441 213
Chris@441 214 #============================================================+
Chris@441 215 # END OF FILE
Chris@441 216 #============================================================+