summaryrefslogtreecommitdiffstats
path: root/vendor/plugins/rfpdf/lib/barcode/barcode.rb
blob: bb57981183a04452c178e4200f99a914e34601ad (plain)
1
2
3
4
5
6
7
8
9
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
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
#============================================================+
# File name   : barcode.rb
# Begin       : 2002-07-31
# Last Update : 2005-01-02
# Author      : Karim Mribti [barcode@mribti.com]
# Version     : 1.1 [0.0.8a (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 : Generic Barcode Render Class for PHP using
#               the GD graphics library.
#
# 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
#  - $mCharSet and $mChars variables were added here
#============================================================+

#
# Barcode Render Class for PHP using the GD graphics library.
# @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
#

# Styles
# Global

#
# option: generate barcode border
#
define("BCS_BORDER", 1);

#
# option: use transparent background
#
define("BCS_TRANSPARENT", 2);

#
# option: center barcode
#
define("BCS_ALIGN_CENTER", 4);

#
# option: align left
#
define("BCS_ALIGN_LEFT", 8);

#
# option: align right
#
define("BCS_ALIGN_RIGHT", 16);

#
# option: generate JPEG image
#
define("BCS_IMAGE_JPEG", 32);

#
# option: generate PNG image
#
define("BCS_IMAGE_PNG", 64);

#
# option: draw text
#
define("BCS_DRAW_TEXT", 128);

#
# option: stretch text
#
define("BCS_STRETCH_TEXT", 256);

#
# option: reverse color
#
define("BCS_REVERSE_COLOR", 512);

#
# option: draw check
# (only for I25 code)
#
define("BCS_I25_DRAW_CHECK", 2048);

#
# set default background color
#
define("BCD_DEFAULT_BACKGROUND_COLOR", 0xFFFFFF);

#
# set default foreground color
#
define("BCD_DEFAULT_FOREGROUND_COLOR", 0x000000);

#
# set default style options
#
define("BCD_DEFAULT_STYLE", BCS_BORDER | BCS_ALIGN_CENTER | BCS_IMAGE_PNG);

#
# set default width
#
define("BCD_DEFAULT_WIDTH", 460);

#
# set default height
#
define("BCD_DEFAULT_HEIGHT", 120);

#
# set default font
#
define("BCD_DEFAULT_FONT", 5);

#
# st default horizontal resolution
#
define("BCD_DEFAULT_XRES", 2);

# Margins

#
# set default margin
#
define("BCD_DEFAULT_MAR_Y1", 0);

#
# set default margin
#
define("BCD_DEFAULT_MAR_Y2", 0);

#
# set default text offset
#
define("BCD_DEFAULT_TEXT_OFFSET", 2);

# For the I25 Only

#
# narrow bar option
# (only for I25 code)
#
define("BCD_I25_NARROW_BAR", 1);

#
# wide bar option
# (only for I25 code)
#
define("BCD_I25_WIDE_BAR", 2);

# For the C39 Only

#
# narrow bar option
# (only for c39 code)
#
define("BCD_C39_NARROW_BAR", 1);

#
# wide bar option
# (only for c39 code)
#
define("BCD_C39_WIDE_BAR", 2);

# For Code 128

#
# set type 1 bar
# (only for c128 code)
#
define("BCD_C128_BAR_1", 1);

#
# set type 2 bar
# (only for c128 code)
#
define("BCD_C128_BAR_2", 2);

#
# set type 3 bar
# (only for c128 code)
#
define("BCD_C128_BAR_3", 3);

#
# set type 4 bar
# (only for c128 code)
#
define("BCD_C128_BAR_4", 4);

#
# Barcode Render Class for PHP using the GD graphics library.
# @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 BarcodeObject {
	#
	# @var Image width in pixels.
	# @access protected
	#
	protected $mWidth;
	
	#
	# @var Image height in pixels.
	# @access protected
	#
	protected $mHeight;
	
	#
	# @var Numeric code for Barcode style.
	# @access protected
	#
	protected $mStyle;
	
	#
	# @var Background color.
	# @access protected
	#
	protected $mBgcolor;
	
	#
	# @var Brush color.
	# @access protected
	#
	protected $mBrush;
	
	#
	# @var Image object.
	# @access protected
	#
	protected $mImg;
	
	#
	# @var Numeric code for character font.
	# @access protected
	#
	protected $mFont;
	
	#
	# @var Error message.
	# @access protected
	#
	protected $mError;
	
	#
	# @var Character Set.
	# @access protected
	#
	protected $mCharSet;
	
	#
	# @var Allowed symbols.
	# @access protected
	#
	protected $mChars;

	#
	# Class Constructor.
	# @param int $Width Image width in pixels.
	# @param int $Height Image height in pixels. 
	# @param int $Style Barcode style.
	#
	def __construct($Width=BCD_DEFAULT_WIDTH, $Height=BCD_DEFAULT_HEIGHT, $Style=BCD_DEFAULT_STYLE)
		@mWidth = $Width;
		@mHeight = $Height;
		@mStyle = $Style;
		@mFont = BCD_DEFAULT_FONT;
		@mImg = ImageCreate(@mWidth, @mHeight);
		$dbColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_FOREGROUND_COLOR : BCD_DEFAULT_BACKGROUND_COLOR;
		$dfColor = @mStyle & BCS_REVERSE_COLOR ? BCD_DEFAULT_BACKGROUND_COLOR : BCD_DEFAULT_FOREGROUND_COLOR;
		@mBgcolor = ImageColorAllocate(@mImg, ($dbColor & 0xFF0000) >> 16,
		($dbColor & 0x00FF00) >> 8, $dbColor & 0x0000FF);
		@mBrush = ImageColorAllocate(@mImg, ($dfColor & 0xFF0000) >> 16,
		($dfColor & 0x00FF00) >> 8, $dfColor & 0x0000FF);
		if (!(@mStyle & BCS_TRANSPARENT))
			ImageFill(@mImg, @mWidth, @mHeight, @mBgcolor);
		end
	end
	
	#
	# Class Destructor.
	# Destroy image object.
	#
	def __destructor()
		@DestroyObject();
	end

	#
	# Returns the image object.
	# @return object image.
	# @author Nicola Asuni
	# @since 1.5.2
	#
	def getImage()
		return @mImg;
	end
	
	#
	# Abstract method used to draw the barcode image.
	# @param int $xres Horizontal resolution.
	#
	def DrawObject($xres)	{
		# there is not implementation neded, is simply the asbsract function.#
		return false;
	end
	
	#
	# Draws the barcode border.
	# @access protected
	#
	protected function DrawBorder()
		ImageRectangle(@mImg, 0, 0, @mWidth-1, @mHeight-1, @mBrush);
	end
	
	#
	# Draws the alphanumeric code.
	# @param int $Font Font type.
	# @param int $xPos Horiziontal position.
	# @param int $yPos Vertical position.
	# @param int $Char Alphanumeric code to write.
	# @access protected
	#
	protected function DrawChar($Font, $xPos, $yPos, $Char)
		ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush);
	end
	
	#
	# Draws a character string.
	# @param int $Font Font type.
	# @param int $xPos Horiziontal position.
	# @param int $yPos Vertical position.
	# @param int $Char string to write.
	# @access protected
	#
	protected function DrawText($Font, $xPos, $yPos, $Char)
		ImageString(@mImg,$Font,$xPos,$yPos,$Char,@mBrush);
	end

	#
	# Draws a single barcode bar.
	# @param int $xPos Horiziontal position.
	# @param int $yPos Vertical position.
	# @param int $xSize Horizontal size.
    # @param int $xSize Vertical size.
    # @return bool trur in case of success, false otherwise.
    # @access protected
	#
	protected function DrawSingleBar($xPos, $yPos, $xSize, $ySize)
		if ($xPos>=0 && $xPos<=@mWidth && ($xPos+$xSize)<=@mWidth &&
		$yPos>=0 && $yPos<=@mHeight && ($yPos+$ySize)<=@mHeight)
			for ($i=0;$i<$xSize;$i++)
				ImageLine(@mImg, $xPos+$i, $yPos, $xPos+$i, $yPos+$ySize, @mBrush);
			end
			return true;
		end
		return false;
	end
	
	#
	# Returns the current error message.
	# @return string error message.
	#
	def GetError()
		return @mError;
	end
	
	#
	# Returns the font height.
	# @param int $font font type.
	# @return int font height.
	#
	def GetFontHeight($font)
		return ImageFontHeight($font);
	end
	
	#
	# Returns the font width.
	# @param int $font font type.
	# @return int font width.
	#
	def GetFontWidth($font)
		return ImageFontWidth($font);
	end
	
	#
	# Set font type.
	# @param int $font font type.
	#
	def SetFont($font)
		@mFont = $font;
	end
	
	#
	# Returns barcode style.
	# @return int barcode style.
	#
	def GetStyle()
		return @mStyle;
	end

	#
	# Set barcode style.
	# @param int $Style barcode style.
	#
	def SetStyle ($Style)
		@mStyle = $Style;
	end

	#
	# Flush the barcode image.
	#
	def FlushObject()
		if ((@mStyle & BCS_BORDER))
			@DrawBorder();
		end
		if (@mStyle & BCS_IMAGE_PNG)
			Header("Content-Type: image/png");
			ImagePng(@mImg);
		elsif (@mStyle & BCS_IMAGE_JPEG)
			Header("Content-Type: image/jpeg");
			ImageJpeg(@mImg);
		end
	end
	
	#
	# Destroy the barcode image.
	#
	def DestroyObject()
		ImageDestroy(@mImg);
	end
}

#============================================================+
# END OF FILE
#============================================================+