Mercurial > hg > soundsoftware-site
comparison vendor/plugins/rfpdf/lib/barcode/c128aobject.rb @ 441:cbce1fd3b1b7 redmine-1.2
Update to Redmine 1.2-stable branch (Redmine SVN rev 6000)
author | Chris Cannam |
---|---|
date | Mon, 06 Jun 2011 14:24:13 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
245:051f544170fe | 441:cbce1fd3b1b7 |
---|---|
1 | |
2 #============================================================+ | |
3 # File name : c128aobject.rb | |
4 # Begin : 2002-07-31 | |
5 # Last Update : 2004-12-29 | |
6 # Author : Karim Mribti [barcode@mribti.com] | |
7 # Version : 0.0.8a 2001-04-01 (original code) | |
8 # License : GNU LGPL (Lesser General Public License) 2.1 | |
9 # http://www.gnu.org/copyleft/lesser.txt | |
10 # Source Code : http://www.mribti.com/barcode/ | |
11 # | |
12 # Description : Code 128-A Barcode Render Class for PHP using | |
13 # the GD graphics library. | |
14 # Code 128-A is a continuous, multilevel and | |
15 # include all upper case alphanumeric characters | |
16 # and ASCII control characters. | |
17 # | |
18 # NOTE: | |
19 # This version contains changes by Nicola Asuni: | |
20 # - porting to Ruby | |
21 # - code style and formatting | |
22 # - automatic php documentation in PhpDocumentor Style | |
23 # (www.phpdoc.org) | |
24 # - minor bug fixing | |
25 #============================================================+ | |
26 | |
27 # | |
28 # Code 128-A Barcode Render Class for PHP using the GD graphics library.<br> | |
29 # Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters. | |
30 # @author Karim Mribti, Nicola Asuni | |
31 # @name BarcodeObject | |
32 # @package com.tecnick.tcpdf | |
33 # @@version 0.0.8a 2001-04-01 (original code) | |
34 # @since 2001-03-25 | |
35 # @license http://www.gnu.org/copyleft/lesser.html LGPL | |
36 # | |
37 | |
38 # | |
39 # Code 128-A Barcode Render Class for PHP using the GD graphics library.<br> | |
40 # Code 128-A is a continuous, multilevel and include all upper case alphanumeric characters and ASCII control characters. | |
41 # @author Karim Mribti, Nicola Asuni | |
42 # @name BarcodeObject | |
43 # @package com.tecnick.tcpdf | |
44 # @@version 0.0.8a 2001-04-01 (original code) | |
45 # @since 2001-03-25 | |
46 # @license http://www.gnu.org/copyleft/lesser.html LGPL | |
47 # | |
48 class C128AObject extends BarcodeObject { | |
49 | |
50 # | |
51 # Class Constructor. | |
52 # @param int $Width Image width in pixels. | |
53 # @param int $Height Image height in pixels. | |
54 # @param int $Style Barcode style. | |
55 # @param int $Value value to print on barcode. | |
56 # | |
57 def __construct($Width, $Height, $Style, $Value) | |
58 parent::__construct($Width, $Height, $Style); | |
59 @mValue = $Value; | |
60 @mChars = " !\"#$%&'()*+�-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_"; | |
61 @mCharSet = array ( | |
62 "212222", # 00# | |
63 "222122", # 01# | |
64 "222221", # 02# | |
65 "121223", # 03# | |
66 "121322", # 04# | |
67 "131222", # 05# | |
68 "122213", # 06# | |
69 "122312", # 07# | |
70 "132212", # 08# | |
71 "221213", # 09# | |
72 "221312", # 10# | |
73 "231212", # 11# | |
74 "112232", # 12# | |
75 "122132", # 13# | |
76 "122231", # 14# | |
77 "113222", # 15# | |
78 "123122", # 16# | |
79 "123221", # 17# | |
80 "223211", # 18# | |
81 "221132", # 19# | |
82 "221231", # 20# | |
83 "213212", # 21# | |
84 "223112", # 22# | |
85 "312131", # 23# | |
86 "311222", # 24# | |
87 "321122", # 25# | |
88 "321221", # 26# | |
89 "312212", # 27# | |
90 "322112", # 28# | |
91 "322211", # 29# | |
92 "212123", # 30# | |
93 "212321", # 31# | |
94 "232121", # 32# | |
95 "111323", # 33# | |
96 "131123", # 34# | |
97 "131321", # 35# | |
98 "112313", # 36# | |
99 "132113", # 37# | |
100 "132311", # 38# | |
101 "211313", # 39# | |
102 "231113", # 40# | |
103 "231311", # 41# | |
104 "112133", # 42# | |
105 "112331", # 43# | |
106 "132131", # 44# | |
107 "113123", # 45# | |
108 "113321", # 46# | |
109 "133121", # 47# | |
110 "313121", # 48# | |
111 "211331", # 49# | |
112 "231131", # 50# | |
113 "213113", # 51# | |
114 "213311", # 52# | |
115 "213131", # 53# | |
116 "311123", # 54# | |
117 "311321", # 55# | |
118 "331121", # 56# | |
119 "312113", # 57# | |
120 "312311", # 58# | |
121 "332111", # 59# | |
122 "314111", # 60# | |
123 "221411", # 61# | |
124 "431111", # 62# | |
125 "111224", # 63# | |
126 "111422", # 64# | |
127 "121124", # 65# | |
128 "121421", # 66# | |
129 "141122", # 67# | |
130 "141221", # 68# | |
131 "112214", # 69# | |
132 "112412", # 70# | |
133 "122114", # 71# | |
134 "122411", # 72# | |
135 "142112", # 73# | |
136 "142211", # 74# | |
137 "241211", # 75# | |
138 "221114", # 76# | |
139 "413111", # 77# | |
140 "241112", # 78# | |
141 "134111", # 79# | |
142 "111242", # 80# | |
143 "121142", # 81# | |
144 "121241", # 82# | |
145 "114212", # 83# | |
146 "124112", # 84# | |
147 "124211", # 85# | |
148 "411212", # 86# | |
149 "421112", # 87# | |
150 "421211", # 88# | |
151 "212141", # 89# | |
152 "214121", # 90# | |
153 "412121", # 91# | |
154 "111143", # 92# | |
155 "111341", # 93# | |
156 "131141", # 94# | |
157 "114113", # 95# | |
158 "114311", # 96# | |
159 "411113", # 97# | |
160 "411311", # 98# | |
161 "113141", # 99# | |
162 "114131", # 100# | |
163 "311141", # 101# | |
164 "411131" # 102# | |
165 ); | |
166 end | |
167 | |
168 # | |
169 # Returns the character index. | |
170 # @param char $char character. | |
171 # @return int character index or -1 in case of error. | |
172 # @access private | |
173 # | |
174 def GetCharIndex($char) | |
175 for ($i=0;$i<64;$i++) | |
176 if (@mChars[$i] == $char) | |
177 return $i; | |
178 end | |
179 end | |
180 return -1; | |
181 end | |
182 | |
183 # | |
184 # Returns the bar size. | |
185 # @param int $xres Horizontal resolution. | |
186 # @param char $char Character. | |
187 # @return int barcode size. | |
188 # @access private | |
189 # | |
190 def GetBarSize($xres, $char) | |
191 switch ($char) | |
192 case '1' | |
193 $cVal = BCD_C128_BAR_1; | |
194 | |
195 case '2' | |
196 $cVal = BCD_C128_BAR_2; | |
197 | |
198 case '3' | |
199 $cVal = BCD_C128_BAR_3; | |
200 | |
201 case '4' | |
202 $cVal = BCD_C128_BAR_4; | |
203 | |
204 default | |
205 $cVal = 0; | |
206 end | |
207 end | |
208 return $cVal# $xres; | |
209 end | |
210 | |
211 # | |
212 # Returns barcode size. | |
213 # @param int $xres Horizontal resolution. | |
214 # @return barcode size. | |
215 # @access private | |
216 # | |
217 def GetSize($xres) | |
218 $len = @mValue.length; | |
219 | |
220 if ($len == 0) { | |
221 @mError = "Null value"; | |
222 return false; | |
223 end | |
224 $ret = 0; | |
225 for ($i=0;$i<$len;$i++) | |
226 if (($id = GetCharIndex(@mValue[$i])) == -1) | |
227 @mError = "C128A not include the char '".@mValue[$i]."'"; | |
228 return false; | |
229 else | |
230 $cset = @mCharSet[$id]; | |
231 $ret += GetBarSize($xres, $cset[0]); | |
232 $ret += GetBarSize($xres, $cset[1]); | |
233 $ret += GetBarSize($xres, $cset[2]); | |
234 $ret += GetBarSize($xres, $cset[3]); | |
235 $ret += GetBarSize($xres, $cset[4]); | |
236 $ret += GetBarSize($xres, $cset[5]); | |
237 end | |
238 end | |
239 | |
240 # length of Check character# | |
241 $cset = GetCheckCharValue(); | |
242 $CheckSize = 0; | |
243 for ($i=0;$i<6;$i++) | |
244 $CheckSize += GetBarSize($cset[$i], $xres); | |
245 end | |
246 $StartSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres; | |
247 $StopSize = 2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + 2*BCD_C128_BAR_3*$xres; | |
248 return $StartSize + $ret + $CheckSize + $StopSize; | |
249 end | |
250 | |
251 # | |
252 # Returns the check-char value. | |
253 # @return string. | |
254 # @access private | |
255 # | |
256 def GetCheckCharValue() | |
257 $len = @mValue.length; | |
258 $sum = 103; # 'A' type; | |
259 for ($i=0;$i<$len;$i++) | |
260 $sum += GetCharIndex(@mValue[$i])# ($i+1); | |
261 end | |
262 $check = $sum % 103; | |
263 return @mCharSet[$check]; | |
264 end | |
265 | |
266 # | |
267 # Draws the start code. | |
268 # @param int $DrawPos Drawing position. | |
269 # @param int $yPos Vertical position. | |
270 # @param int $ySize Vertical size. | |
271 # @param int $xres Horizontal resolution. | |
272 # @return int drawing position. | |
273 # @access private | |
274 # | |
275 def DrawStart($DrawPos, $yPos, $ySize, $xres) | |
276 # Start code is '211412'# | |
277 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); | |
278 $DrawPos += GetBarSize('2', $xres); | |
279 $DrawPos += GetBarSize('1', $xres); | |
280 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); | |
281 $DrawPos += GetBarSize('1', $xres); | |
282 $DrawPos += GetBarSize('4', $xres); | |
283 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); | |
284 $DrawPos += GetBarSize('1', $xres); | |
285 $DrawPos += GetBarSize('2', $xres); | |
286 return $DrawPos; | |
287 end | |
288 | |
289 # | |
290 # Draws the stop code. | |
291 # @param int $DrawPos Drawing position. | |
292 # @param int $yPos Vertical position. | |
293 # @param int $ySize Vertical size. | |
294 # @param int $xres Horizontal resolution. | |
295 # @return int drawing position. | |
296 # @access private | |
297 # | |
298 def DrawStop($DrawPos, $yPos, $ySize, $xres) | |
299 # Stop code is '2331112'# | |
300 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); | |
301 $DrawPos += GetBarSize('2', $xres); | |
302 $DrawPos += GetBarSize('3', $xres); | |
303 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('3', $xres) , $ySize); | |
304 $DrawPos += GetBarSize('3', $xres); | |
305 $DrawPos += GetBarSize('1', $xres); | |
306 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('1', $xres) , $ySize); | |
307 $DrawPos += GetBarSize('1', $xres); | |
308 $DrawPos += GetBarSize('1', $xres); | |
309 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize('2', $xres) , $ySize); | |
310 $DrawPos += GetBarSize('2', $xres); | |
311 return $DrawPos; | |
312 end | |
313 | |
314 # | |
315 # Draws the check-char code. | |
316 # @param int $DrawPos Drawing position. | |
317 # @param int $yPos Vertical position. | |
318 # @param int $ySize Vertical size. | |
319 # @param int $xres Horizontal resolution. | |
320 # @return int drawing position. | |
321 # @access private | |
322 # | |
323 def DrawCheckChar($DrawPos, $yPos, $ySize, $xres) | |
324 $cset = GetCheckCharValue(); | |
325 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ySize); | |
326 $DrawPos += GetBarSize($cset[0], $xres); | |
327 $DrawPos += GetBarSize($cset[1], $xres); | |
328 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ySize); | |
329 $DrawPos += GetBarSize($cset[2], $xres); | |
330 $DrawPos += GetBarSize($cset[3], $xres); | |
331 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ySize); | |
332 $DrawPos += GetBarSize($cset[4], $xres); | |
333 $DrawPos += GetBarSize($cset[5], $xres); | |
334 return $DrawPos; | |
335 end | |
336 | |
337 # | |
338 # Draws the barcode object. | |
339 # @param int $xres Horizontal resolution. | |
340 # @return bool true in case of success. | |
341 # | |
342 def DrawObject($xres) | |
343 $len = @mValue.length; | |
344 if (($size = GetSize($xres))==0) | |
345 return false; | |
346 end | |
347 | |
348 if (@mStyle & BCS_ALIGN_CENTER) $sPos = (integer)((@mWidth - $size ) / 2); | |
349 elsif (@mStyle & BCS_ALIGN_RIGHT) $sPos = @mWidth - $size; | |
350 else $sPos = 0; | |
351 | |
352 # Total height of bar code -Bars only-# | |
353 if (@mStyle & BCS_DRAW_TEXT) $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2 - GetFontHeight(@mFont); | |
354 else $ysize = @mHeight - BCD_DEFAULT_MAR_Y1 - BCD_DEFAULT_MAR_Y2; | |
355 | |
356 # Draw text# | |
357 if (@mStyle & BCS_DRAW_TEXT) | |
358 if (@mStyle & BCS_STRETCH_TEXT) | |
359 for ($i=0;$i<$len;$i++) | |
360 @DrawChar(@mFont, $sPos+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres)+($size/$len)*$i, | |
361 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue[$i]); | |
362 else# Center# | |
363 $text_width = GetFontWidth(@mFont)# @mValue.length; | |
364 @DrawText(@mFont, $sPos+(($size-$text_width)/2)+(2*BCD_C128_BAR_2*$xres + 3*BCD_C128_BAR_1*$xres + BCD_C128_BAR_4*$xres), | |
365 $ysize + BCD_DEFAULT_MAR_Y1 + BCD_DEFAULT_TEXT_OFFSET, @mValue); | |
366 end | |
367 end | |
368 | |
369 $cPos = 0; | |
370 $DrawPos = @DrawStart($sPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); | |
371 do { | |
372 $c = GetCharIndex(@mValue[$cPos]); | |
373 $cset = @mCharSet[$c]; | |
374 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[0], $xres) , $ysize); | |
375 $DrawPos += GetBarSize($cset[0], $xres); | |
376 $DrawPos += GetBarSize($cset[1], $xres); | |
377 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[2], $xres) , $ysize); | |
378 $DrawPos += GetBarSize($cset[2], $xres); | |
379 $DrawPos += GetBarSize($cset[3], $xres); | |
380 @DrawSingleBar($DrawPos, BCD_DEFAULT_MAR_Y1, GetBarSize($cset[4], $xres) , $ysize); | |
381 $DrawPos += GetBarSize($cset[4], $xres); | |
382 $DrawPos += GetBarSize($cset[5], $xres); | |
383 $cPos += 1; | |
384 end while ($cPos<$len); | |
385 $DrawPos = @DrawCheckChar($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); | |
386 $DrawPos = @DrawStop($DrawPos, BCD_DEFAULT_MAR_Y1 , $ysize, $xres); | |
387 return true; | |
388 end | |
389 } | |
390 | |
391 #============================================================+ | |
392 # END OF FILE | |
393 #============================================================+ |