barcode 0.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/barcode/code39.rb +124 -0
  2. metadata +37 -0
@@ -0,0 +1,124 @@
1
+ # barcode/code39.rb
2
+ #
3
+ # Author:: Clinton R. Nixon <crnixon@gmail.com>
4
+ # Copyright:: Copyright (c) 2005 Demand Publishing
5
+ # License:: Distributes under the same terms as Ruby
6
+ # Version:: 0.2
7
+
8
+ require 'RMagick'
9
+ include Magick
10
+
11
+ # This class takes a string and generates a Code 39-based barcode
12
+ # from that string.
13
+ class Code39
14
+
15
+ # quick reference as to what's up with @@encoding:
16
+ # - B => large solid bar
17
+ # - b => small solid bar
18
+ # - W => large space
19
+ # - w => small space
20
+ @@encoding = {
21
+ '0' => "bwbWBwBwb",
22
+ '1' => "BwbWbwbwB",
23
+ '2' => "bwBWbwbwB",
24
+ '3' => "BwBWbwbwb",
25
+ '4' => "bwbWBwbwB",
26
+ '5' => "BwbWBwbwb",
27
+ '6' => "bwBWBwbwb",
28
+ '7' => "bwbWbwBwB",
29
+ '8' => "BwbWbwBwb",
30
+ '9' => "bwBWbwBwb",
31
+ 'A' => "BwbwbWbwB",
32
+ 'B' => "bwBwbWbwB",
33
+ 'C' => "BwBwbWbwb",
34
+ 'D' => "bwbwBWbwB",
35
+ 'E' => "BwbwBWbwb",
36
+ 'F' => "bwBwBWbwb",
37
+ 'G' => "bwbwbWBwB",
38
+ 'H' => "BwbwbWBwb",
39
+ 'I' => "bwBwbWBwb",
40
+ 'J' => "bwbwBWBwb",
41
+ 'K' => "BwbwbwbWB",
42
+ 'L' => "bwBwbwbWB",
43
+ 'M' => "BwBwbwbWb",
44
+ 'N' => "bwbwBwbWB",
45
+ 'O' => "BwbwBwbWb",
46
+ 'P' => "bwBwBwbWb",
47
+ 'Q' => "bwbwbwBWB",
48
+ 'R' => "BwbwbwBWb",
49
+ 'S' => "bwBwbwBWb",
50
+ 'T' => "bwbwBwBWb",
51
+ 'U' => "BWbwbwbwB",
52
+ 'V' => "bWBwbwbwB",
53
+ 'W' => "BWBwbwbwb",
54
+ 'X' => "bWbwBwbwB",
55
+ 'Y' => "BWbwBwbwb",
56
+ 'Z' => "bWBwBwbwb",
57
+ '-' => "bWbwbwBwB",
58
+ '.' => "BWbwbwBwb",
59
+ ' ' => "bWBwbwBwb",
60
+ '$' => "bWbWbWbwb",
61
+ '/' => "bWbWbwbWb",
62
+ '+' => "bWbwbWbWb",
63
+ '%' => "bwbWbWbWb",
64
+ '*' => "bWbwBwBwb"
65
+ }
66
+
67
+ # Takes a string, uppercases it, and wraps it in asterisks.
68
+ # If any character is unavailable in Code 39 encoding,
69
+ # throws a vicious error.
70
+ def initialize(text)
71
+ text = text.upcase
72
+ text.split(//).each do |char|
73
+ if not @@encoding.has_key?(char)
74
+ raise "Unencodable string."
75
+ end
76
+ end
77
+
78
+ @text = "*#{text}*"
79
+ end
80
+
81
+ # Outputs a string that represents the encoding.
82
+ # Not necessarily useful externally, but
83
+ # who knows?
84
+ def to_s
85
+ output = String.new()
86
+ @text.split(//).each do |char|
87
+ output += @@encoding[char] + " "
88
+ end
89
+ return output
90
+ end
91
+
92
+
93
+ # The overly complicated image generation code.
94
+ # Your barcode image width and height should be in pixels.
95
+ # The actual barcode will not be that width, instead
96
+ # it will be a multiple of your text string (plus two
97
+ # asterisks - @text) length * 14. White space will center
98
+ # the rest.
99
+ def to_img(filename, width, height)
100
+ bar_code_width = width - (width % ( @text.length * 14 ) )
101
+ letter_width = bar_code_width / @text.length
102
+ small_bar_width = letter_width / 14
103
+ large_bar_width = ((7.0 / 3.0) * small_bar_width.to_f).to_i
104
+
105
+ canvas = Image.new(width, height)
106
+ gc = Draw.new
107
+ gc.fill('black')
108
+ gc.stroke('black')
109
+ gc.stroke_width(-1)
110
+ # Necessary to prevent massive blurry image nonsense.
111
+ gc.stroke_antialias(false)
112
+
113
+ cur_x = (width - bar_code_width) / 2
114
+
115
+ self.to_s.split(//).each do |char|
116
+ if char.upcase == "B"
117
+ gc.rectangle(cur_x, 0, cur_x + (char == "B" ? large_bar_width : small_bar_width), height)
118
+ end
119
+ cur_x += char.match(/[BW]/) ? large_bar_width : small_bar_width
120
+ end
121
+ gc.draw(canvas)
122
+ canvas.write(filename)
123
+ end
124
+ end
metadata ADDED
@@ -0,0 +1,37 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.10
3
+ specification_version: 1
4
+ name: barcode
5
+ version: !ruby/object:Gem::Version
6
+ version: "0.2"
7
+ date: 2005-07-13
8
+ summary: Barcode classes.
9
+ require_paths:
10
+ - lib
11
+ email: crnixon@gmail.com
12
+ homepage:
13
+ rubyforge_project:
14
+ description: Simple classes for creating barcodes.
15
+ autorequire:
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: true
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ -
22
+ - ">"
23
+ - !ruby/object:Gem::Version
24
+ version: 0.0.0
25
+ version:
26
+ platform: ruby
27
+ authors:
28
+ - Clinton R. Nixon
29
+ files:
30
+ - lib/barcode/code39.rb
31
+ test_files: []
32
+ rdoc_options: []
33
+ extra_rdoc_files: []
34
+ executables: []
35
+ extensions: []
36
+ requirements: []
37
+ dependencies: []