zebra-zpl 1.0.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +62 -0
- data/CONTRIBUTING.md +49 -0
- data/Gemfile +6 -0
- data/README.md +259 -76
- data/docs/example.rb +249 -0
- data/docs/images/barcode.png +0 -0
- data/docs/images/datamatrix.png +0 -0
- data/docs/images/earth.jpg +0 -0
- data/docs/images/graphics.png +0 -0
- data/docs/images/image.png +0 -0
- data/docs/images/image_inverted.png +0 -0
- data/docs/images/images.png +0 -0
- data/docs/images/justification.png +0 -0
- data/docs/images/qrcode.png +0 -0
- data/docs/images/rotation.png +0 -0
- data/docs/images/text.png +0 -0
- data/lib/zebra/print_job.rb +7 -13
- data/lib/zebra/zpl.rb +20 -13
- data/lib/zebra/zpl/barcode.rb +29 -12
- data/lib/zebra/zpl/barcode_type.rb +4 -1
- data/lib/zebra/zpl/box.rb +16 -4
- data/lib/zebra/zpl/comment.rb +15 -0
- data/lib/zebra/zpl/datamatrix.rb +76 -0
- data/lib/zebra/zpl/graphic.rb +91 -0
- data/lib/zebra/zpl/image.rb +91 -0
- data/lib/zebra/zpl/label.rb +2 -13
- data/lib/zebra/zpl/pdf417.rb +50 -0
- data/lib/zebra/zpl/qrcode.rb +2 -2
- data/lib/zebra/zpl/text.rb +44 -20
- data/lib/zebra/zpl/version.rb +1 -1
- data/spec/fixtures/default.jpg +0 -0
- data/spec/spec_helper.rb +6 -2
- data/spec/zebra/print_job_spec.rb +13 -18
- data/spec/zebra/zpl/barcode_spec.rb +70 -63
- data/spec/zebra/zpl/box_spec.rb +27 -31
- data/spec/zebra/zpl/character_set_spec.rb +7 -7
- data/spec/zebra/zpl/comment_spec.rb +18 -0
- data/spec/zebra/zpl/datamatrix_spec.rb +124 -0
- data/spec/zebra/zpl/graphics_spec.rb +227 -0
- data/spec/zebra/zpl/image_spec.rb +113 -0
- data/spec/zebra/zpl/label_spec.rb +40 -52
- data/spec/zebra/zpl/pdf417_spec.rb +108 -0
- data/spec/zebra/zpl/qrcode_spec.rb +92 -92
- data/spec/zebra/zpl/text_spec.rb +57 -55
- data/zebra-zpl.gemspec +14 -15
- metadata +71 -22
data/docs/example.rb
ADDED
@@ -0,0 +1,249 @@
|
|
1
|
+
|
2
|
+
def print_zpl_str(name, label)
|
3
|
+
zpl = ''
|
4
|
+
label.dump_contents zpl
|
5
|
+
puts "\n#{name}:\n#{zpl}\n\n"
|
6
|
+
end
|
7
|
+
|
8
|
+
def new_label
|
9
|
+
Zebra::Zpl::Label.new(
|
10
|
+
width: 600,
|
11
|
+
length: 305,
|
12
|
+
print_speed: 6,
|
13
|
+
print_density: 5,
|
14
|
+
copies: 1
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
################################################################################
|
19
|
+
# Text
|
20
|
+
################################################################################
|
21
|
+
label = new_label
|
22
|
+
text = Zebra::Zpl::Text.new(
|
23
|
+
data: "Hello, printer!",
|
24
|
+
position: [10, 125],
|
25
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
26
|
+
justification: Zebra::Zpl::Justification::CENTER
|
27
|
+
)
|
28
|
+
box = Zebra::Zpl::Graphic.new(
|
29
|
+
graphic_type: 'B',
|
30
|
+
position: [10,5],
|
31
|
+
graphic_width: label.width,
|
32
|
+
graphic_height: label.length-10,
|
33
|
+
line_thickness: 1,
|
34
|
+
rounding_degree: 1
|
35
|
+
)
|
36
|
+
label << text
|
37
|
+
label << box
|
38
|
+
print_zpl_str('text', label)
|
39
|
+
|
40
|
+
################################################################################
|
41
|
+
# Barcode
|
42
|
+
################################################################################
|
43
|
+
label = new_label
|
44
|
+
barcode = Zebra::Zpl::Barcode.new(
|
45
|
+
data: 'F112358',
|
46
|
+
position: [80, 50],
|
47
|
+
height: 150,
|
48
|
+
width: 4,
|
49
|
+
print_human_readable_code: true,
|
50
|
+
type: Zebra::Zpl::BarcodeType::CODE_128_AUTO
|
51
|
+
)
|
52
|
+
label << barcode
|
53
|
+
print_zpl_str('barcode', label)
|
54
|
+
|
55
|
+
################################################################################
|
56
|
+
# QR Code
|
57
|
+
################################################################################
|
58
|
+
label = new_label
|
59
|
+
qrcode = Zebra::Zpl::Qrcode.new(
|
60
|
+
data: 'www.github.com',
|
61
|
+
position: [200, 45],
|
62
|
+
scale_factor: 8,
|
63
|
+
correction_level: 'H',
|
64
|
+
)
|
65
|
+
label << qrcode
|
66
|
+
print_zpl_str('qrcode', label)
|
67
|
+
|
68
|
+
################################################################################
|
69
|
+
# Data Matrix
|
70
|
+
################################################################################
|
71
|
+
label = new_label
|
72
|
+
datamatrix = Zebra::Zpl::Datamatrix.new(
|
73
|
+
data: 'www.github.com',
|
74
|
+
position: [225, 75],
|
75
|
+
symbol_height: 10,
|
76
|
+
aspect_ratio: 1
|
77
|
+
)
|
78
|
+
label << datamatrix
|
79
|
+
print_zpl_str('datamatrix', label)
|
80
|
+
|
81
|
+
################################################################################
|
82
|
+
# Graphics
|
83
|
+
################################################################################
|
84
|
+
label = new_label
|
85
|
+
box = Zebra::Zpl::Graphic.new(
|
86
|
+
graphic_type: 'B',
|
87
|
+
position: [10,10],
|
88
|
+
graphic_width: 80,
|
89
|
+
graphic_height: 80,
|
90
|
+
line_thickness: 2,
|
91
|
+
rounding_degree: 2
|
92
|
+
)
|
93
|
+
circle = Zebra::Zpl::Graphic.new(
|
94
|
+
graphic_type: 'C',
|
95
|
+
position: [100,10],
|
96
|
+
graphic_width: 80,
|
97
|
+
line_thickness: 3
|
98
|
+
)
|
99
|
+
diagonal1 = Zebra::Zpl::Graphic.new(
|
100
|
+
graphic_type: 'D',
|
101
|
+
position: [190,10],
|
102
|
+
graphic_width: 80,
|
103
|
+
graphic_height: 80,
|
104
|
+
line_thickness: 3,
|
105
|
+
orientation: 'R'
|
106
|
+
)
|
107
|
+
diagonal2 = diagonal1.dup
|
108
|
+
diagonal2.orientation = 'L'
|
109
|
+
ellipse = Zebra::Zpl::Graphic.new(
|
110
|
+
graphic_type: 'E',
|
111
|
+
position: [280,10],
|
112
|
+
graphic_width: 40,
|
113
|
+
graphic_height: 80,
|
114
|
+
line_thickness: 3
|
115
|
+
)
|
116
|
+
symbol = Zebra::Zpl::Graphic.new(
|
117
|
+
graphic_type: 'S',
|
118
|
+
symbol_type: 'B',
|
119
|
+
position: [335,10],
|
120
|
+
graphic_width: 80,
|
121
|
+
graphic_height: 80
|
122
|
+
)
|
123
|
+
|
124
|
+
label << box
|
125
|
+
label << circle
|
126
|
+
label << diagonal1
|
127
|
+
label << diagonal2
|
128
|
+
label << ellipse
|
129
|
+
label << symbol
|
130
|
+
label.elements.each { |e| e.position = [e.x + 110 , e.y + 90] }
|
131
|
+
print_zpl_str('graphics', label)
|
132
|
+
|
133
|
+
################################################################################
|
134
|
+
# Images
|
135
|
+
################################################################################
|
136
|
+
label = new_label
|
137
|
+
image = Zebra::Zpl::Image.new(
|
138
|
+
path: File.expand_path('./images/earth.jpg', File.dirname(__FILE__)),
|
139
|
+
position: [145, 0],
|
140
|
+
width: 305,
|
141
|
+
height: 305
|
142
|
+
)
|
143
|
+
label << image
|
144
|
+
print_zpl_str('image', label)
|
145
|
+
|
146
|
+
label = new_label
|
147
|
+
image = Zebra::Zpl::Image.new(
|
148
|
+
path: File.expand_path('./images/earth.jpg', File.dirname(__FILE__)),
|
149
|
+
position: [145, 0],
|
150
|
+
width: 305,
|
151
|
+
height: 305,
|
152
|
+
invert: true
|
153
|
+
)
|
154
|
+
label << image
|
155
|
+
print_zpl_str('image_inverted', label)
|
156
|
+
|
157
|
+
|
158
|
+
################################################################################
|
159
|
+
# Justification
|
160
|
+
################################################################################
|
161
|
+
label = new_label
|
162
|
+
t1 = Zebra::Zpl::Text.new(
|
163
|
+
data: "ZPL",
|
164
|
+
position: [10, 25],
|
165
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
166
|
+
justification: Zebra::Zpl::Justification::LEFT
|
167
|
+
)
|
168
|
+
t2 = Zebra::Zpl::Text.new(
|
169
|
+
data: "ZPL",
|
170
|
+
position: [10, 65],
|
171
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
172
|
+
justification: Zebra::Zpl::Justification::CENTER
|
173
|
+
)
|
174
|
+
t3 = Zebra::Zpl::Text.new(
|
175
|
+
data: "ZPL",
|
176
|
+
position: [10, 105],
|
177
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
178
|
+
justification: Zebra::Zpl::Justification::RIGHT
|
179
|
+
)
|
180
|
+
t4 = Zebra::Zpl::Text.new(
|
181
|
+
data: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
|
182
|
+
position: [10, 180],
|
183
|
+
font_size: Zebra::Zpl::FontSize::SIZE_4,
|
184
|
+
justification: Zebra::Zpl::Justification::JUSTIFIED
|
185
|
+
)
|
186
|
+
box = Zebra::Zpl::Graphic.new(
|
187
|
+
graphic_type: 'B',
|
188
|
+
position: [10,5],
|
189
|
+
graphic_width: label.width,
|
190
|
+
graphic_height: label.length-10,
|
191
|
+
line_thickness: 1,
|
192
|
+
rounding_degree: 1
|
193
|
+
)
|
194
|
+
label << t1
|
195
|
+
label << t2
|
196
|
+
label << t3
|
197
|
+
label << t4
|
198
|
+
label << box
|
199
|
+
print_zpl_str('justification', label)
|
200
|
+
|
201
|
+
################################################################################
|
202
|
+
# Rotation
|
203
|
+
################################################################################
|
204
|
+
label = new_label
|
205
|
+
t1 = Zebra::Zpl::Text.new(
|
206
|
+
data: "Zero",
|
207
|
+
position: [10, 125],
|
208
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
209
|
+
rotation: Zebra::Zpl::Rotation::NO_ROTATION,
|
210
|
+
max_lines: 1
|
211
|
+
)
|
212
|
+
t2 = Zebra::Zpl::Text.new(
|
213
|
+
data: "90",
|
214
|
+
position: [100, 125],
|
215
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
216
|
+
rotation: Zebra::Zpl::Rotation::DEGREES_90,
|
217
|
+
max_lines: 1
|
218
|
+
)
|
219
|
+
t3 = Zebra::Zpl::Text.new(
|
220
|
+
data: "180",
|
221
|
+
position: [175, 125],
|
222
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
223
|
+
rotation: Zebra::Zpl::Rotation::DEGREES_180,
|
224
|
+
justification: Zebra::Zpl::Justification::RIGHT,
|
225
|
+
max_lines: 1
|
226
|
+
)
|
227
|
+
t4 = Zebra::Zpl::Text.new(
|
228
|
+
data: "270",
|
229
|
+
position: [275, 125],
|
230
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
231
|
+
rotation: Zebra::Zpl::Rotation::DEGREES_270,
|
232
|
+
justification: Zebra::Zpl::Justification::RIGHT,
|
233
|
+
max_lines: 1
|
234
|
+
)
|
235
|
+
box = Zebra::Zpl::Graphic.new(
|
236
|
+
graphic_type: 'B',
|
237
|
+
position: [10,5],
|
238
|
+
graphic_width: label.width,
|
239
|
+
graphic_height: label.length-10,
|
240
|
+
line_thickness: 1,
|
241
|
+
rounding_degree: 1
|
242
|
+
)
|
243
|
+
label << t1
|
244
|
+
label << t2
|
245
|
+
label << t3
|
246
|
+
label << t4
|
247
|
+
label.elements.each { |e| e.position = [e.x + 150, e.y] }
|
248
|
+
label << box
|
249
|
+
print_zpl_str('rotation', label)
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/zebra/print_job.rb
CHANGED
@@ -1,32 +1,26 @@
|
|
1
1
|
module Zebra
|
2
2
|
class PrintJob
|
3
|
-
# class UnknownPrinter < StandardError
|
4
|
-
# def initialize(printer)
|
5
|
-
# super("Could not find a printer named #{printer}")
|
6
|
-
# end
|
7
|
-
# end
|
8
3
|
|
9
4
|
attr_reader :printer
|
10
5
|
|
11
6
|
def initialize(printer)
|
12
|
-
#check_existent_printers printer
|
13
|
-
|
14
7
|
@printer = printer
|
15
8
|
end
|
16
9
|
|
17
10
|
def print(label, ip)
|
18
11
|
@remote_ip = ip
|
19
|
-
|
12
|
+
if label.is_a? String
|
13
|
+
tempfile = Tempfile.new "zebra_label"
|
14
|
+
tempfile.write label
|
15
|
+
tempfile.close
|
16
|
+
else
|
17
|
+
tempfile = label.persist
|
18
|
+
end
|
20
19
|
send_to_printer tempfile.path
|
21
20
|
end
|
22
21
|
|
23
22
|
private
|
24
23
|
|
25
|
-
# def check_existent_printers(printer)
|
26
|
-
# existent_printers = Cups.show_destinations
|
27
|
-
# raise UnknownPrinter.new(printer) unless existent_printers.include?(printer)
|
28
|
-
# end
|
29
|
-
|
30
24
|
def send_to_printer(path)
|
31
25
|
puts "* * * * * * * * * * * * Sending file to printer #{@printer} at #{@remote_ip} * * * * * * * * * * "
|
32
26
|
result = system("rlpr -H #{@remote_ip} -P #{@printer} -o #{path} 2>&1") # try printing to LPD on windows machine first
|
data/lib/zebra/zpl.rb
CHANGED
@@ -1,19 +1,26 @@
|
|
1
|
-
|
1
|
+
require 'img2zpl'
|
2
2
|
require 'tempfile'
|
3
|
-
|
4
|
-
require 'zebra/
|
5
|
-
|
3
|
+
|
4
|
+
require 'zebra/print_job'
|
5
|
+
|
6
|
+
require 'zebra/zpl/barcode_type'
|
7
|
+
require 'zebra/zpl/barcode'
|
8
|
+
require 'zebra/zpl/box'
|
6
9
|
require 'zebra/zpl/character_set'
|
7
|
-
require 'zebra/zpl/
|
8
|
-
require 'zebra/zpl/
|
9
|
-
require 'zebra/zpl/
|
10
|
+
require 'zebra/zpl/comment'
|
11
|
+
require 'zebra/zpl/country_code'
|
12
|
+
require 'zebra/zpl/datamatrix'
|
10
13
|
require 'zebra/zpl/font'
|
11
|
-
require 'zebra/zpl/
|
14
|
+
require 'zebra/zpl/graphic'
|
15
|
+
require 'zebra/zpl/image'
|
16
|
+
require 'zebra/zpl/justification'
|
12
17
|
require 'zebra/zpl/label'
|
13
|
-
require 'zebra/zpl/
|
14
|
-
require 'zebra/zpl/
|
15
|
-
require 'zebra/zpl/
|
16
|
-
require 'zebra/
|
18
|
+
require 'zebra/zpl/language'
|
19
|
+
require 'zebra/zpl/multipliers'
|
20
|
+
require 'zebra/zpl/pdf417'
|
21
|
+
require 'zebra/zpl/print_mode'
|
17
22
|
require 'zebra/zpl/qrcode'
|
18
|
-
require 'zebra/zpl/justification'
|
19
23
|
require 'zebra/zpl/raw'
|
24
|
+
require 'zebra/zpl/rotation'
|
25
|
+
require 'zebra/zpl/text'
|
26
|
+
require 'zebra/zpl/version'
|
data/lib/zebra/zpl/barcode.rb
CHANGED
@@ -5,15 +5,20 @@ module Zebra
|
|
5
5
|
class Barcode
|
6
6
|
include Printable
|
7
7
|
|
8
|
+
class InvalidRatioError < StandardError; end
|
8
9
|
class InvalidNarrowBarWidthError < StandardError; end
|
9
10
|
class InvalidWideBarWidthError < StandardError; end
|
10
11
|
|
11
12
|
attr_accessor :height
|
12
|
-
attr_reader :type, :
|
13
|
+
attr_reader :type, :ratio, :narrow_bar_width, :wide_bar_width
|
13
14
|
attr_writer :print_human_readable_code
|
14
15
|
|
15
|
-
def width=(
|
16
|
-
@width =
|
16
|
+
def width=(value)
|
17
|
+
@width = value || 0
|
18
|
+
end
|
19
|
+
|
20
|
+
def width
|
21
|
+
@width || @narrow_bar_width || @wide_bar_width || 0
|
17
22
|
end
|
18
23
|
|
19
24
|
def type=(type)
|
@@ -21,14 +26,27 @@ module Zebra
|
|
21
26
|
@type = type
|
22
27
|
end
|
23
28
|
|
24
|
-
def
|
25
|
-
raise
|
26
|
-
@
|
29
|
+
def ratio=(value)
|
30
|
+
raise InvalidRatioError unless value.to_f >= 2.0 && value.to_f <= 3.0
|
31
|
+
@ratio = value
|
32
|
+
end
|
33
|
+
|
34
|
+
def ratio
|
35
|
+
if !@wide_bar_width.nil? && !@narrow_bar_width.nil?
|
36
|
+
(@wide_bar_width.to_f / @narrow_bar_width.to_f).round(1)
|
37
|
+
else
|
38
|
+
@ratio
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def narrow_bar_width=(value)
|
43
|
+
raise InvalidNarrowBarWidthError unless (1..10).include?(value.to_i)
|
44
|
+
@narrow_bar_width = value
|
27
45
|
end
|
28
46
|
|
29
|
-
def wide_bar_width=(
|
30
|
-
raise InvalidWideBarWidthError unless (2..30).include?(
|
31
|
-
@wide_bar_width =
|
47
|
+
def wide_bar_width=(value)
|
48
|
+
raise InvalidWideBarWidthError unless (2..30).include?(value.to_i)
|
49
|
+
@wide_bar_width = value
|
32
50
|
end
|
33
51
|
|
34
52
|
def print_human_readable_code
|
@@ -38,7 +56,7 @@ module Zebra
|
|
38
56
|
def to_zpl
|
39
57
|
check_attributes
|
40
58
|
human_readable = print_human_readable_code ? "Y" : "N"
|
41
|
-
"^FW#{rotation}^FO#{x},#{y}^BY#{
|
59
|
+
"^FW#{rotation}^FO#{x},#{y}^BY#{width},#{ratio},#{height}^B#{type}#{rotation},,#{human_readable}^FD#{data}^FS"
|
42
60
|
end
|
43
61
|
|
44
62
|
private
|
@@ -47,8 +65,7 @@ module Zebra
|
|
47
65
|
super
|
48
66
|
raise MissingAttributeError.new("the barcode type to be used is not given") unless @type
|
49
67
|
raise MissingAttributeError.new("the height to be used is not given") unless @height
|
50
|
-
raise MissingAttributeError.new("the
|
51
|
-
raise MissingAttributeError.new("the wide bar width to be used is not given") unless @wide_bar_width
|
68
|
+
raise MissingAttributeError.new("the width to be used is not given") unless @width || @narrow_bar_width || @wide_bar_width
|
52
69
|
end
|
53
70
|
end
|
54
71
|
end
|
@@ -11,6 +11,9 @@ module Zebra
|
|
11
11
|
CODE_AZTEC_PARAMS = "O"
|
12
12
|
CODE_UPS_MAXICODE = "D"
|
13
13
|
CODE_QR = "Q"
|
14
|
+
CODE_UPCA = "U"
|
15
|
+
CODE_UPCE = "9"
|
16
|
+
CODE_EAN13 = "E"
|
14
17
|
|
15
18
|
# Legacy (EPL) bar code suffixes
|
16
19
|
# CODE_39 = "3"
|
@@ -23,7 +26,7 @@ module Zebra
|
|
23
26
|
# CODABAR = "K"
|
24
27
|
|
25
28
|
def self.valid_barcode_type?(type)
|
26
|
-
%w(3 A C K 0 O D Q).include? type
|
29
|
+
%w(3 A C K 0 O D Q U 9 E).include? type
|
27
30
|
end
|
28
31
|
|
29
32
|
def self.validate_barcode_type(type)
|