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 #============================================================+
|