zebra-zpl 1.0.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +71 -0
- data/CONTRIBUTING.md +49 -0
- data/Gemfile +6 -0
- data/README.md +348 -89
- data/docs/example.rb +290 -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/image_manipulation.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 +19 -17
- data/lib/zebra/zpl.rb +26 -18
- 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/font.rb +1 -1
- data/lib/zebra/zpl/graphic.rb +91 -0
- data/lib/zebra/zpl/image.rb +97 -0
- data/lib/zebra/zpl/label.rb +3 -14
- data/lib/zebra/zpl/pdf417.rb +50 -0
- data/lib/zebra/zpl/qrcode.rb +6 -2
- data/lib/zebra/zpl/raw.rb +25 -0
- 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 +146 -0
- data/spec/zebra/zpl/label_spec.rb +41 -53
- 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 +60 -55
- data/zebra-zpl.gemspec +12 -12
- metadata +63 -27
data/docs/example.rb
ADDED
@@ -0,0 +1,290 @@
|
|
1
|
+
require_relative '../lib/zebra/zpl'
|
2
|
+
|
3
|
+
def print_zpl_str(name, label)
|
4
|
+
zpl = ''
|
5
|
+
label.dump_contents zpl
|
6
|
+
puts "\n#{name}:\n#{zpl}\n\n"
|
7
|
+
end
|
8
|
+
|
9
|
+
def new_label
|
10
|
+
Zebra::Zpl::Label.new(
|
11
|
+
width: 600,
|
12
|
+
length: 305,
|
13
|
+
print_speed: 6,
|
14
|
+
print_density: 5,
|
15
|
+
copies: 1
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
################################################################################
|
20
|
+
# Text
|
21
|
+
################################################################################
|
22
|
+
label = new_label
|
23
|
+
text = Zebra::Zpl::Text.new(
|
24
|
+
data: "Hello, printer!",
|
25
|
+
position: [10, 125],
|
26
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
27
|
+
justification: Zebra::Zpl::Justification::CENTER
|
28
|
+
)
|
29
|
+
box = Zebra::Zpl::Graphic.new(
|
30
|
+
graphic_type: 'B',
|
31
|
+
position: [10,5],
|
32
|
+
graphic_width: label.width,
|
33
|
+
graphic_height: label.length-10,
|
34
|
+
line_thickness: 1,
|
35
|
+
rounding_degree: 1
|
36
|
+
)
|
37
|
+
label << text
|
38
|
+
label << box
|
39
|
+
print_zpl_str('text', label)
|
40
|
+
|
41
|
+
################################################################################
|
42
|
+
# Raw ZPL
|
43
|
+
################################################################################
|
44
|
+
label = new_label
|
45
|
+
zpl_string = "^GFA,1300,1300,13,,::::::O01IFE,N01KFE,N0MFC,M03NF,M0OFC,L03PF,L0QF8,K01QFE,K03RF,K07RF8,J01SFC,J03F9OFE7E,J07F01MFE03F,J07E007LF803F8,J0FE003KFE001FC,I01FEI0FC00FC001FE,I03FCI04M01FF,I07FCQ01FF,I07FCQ01FF8,I0FFCQ01FFC,I0FFEQ01FFC,001FFEQ01FFE,:003FFEQ03IF,003FFEQ01IF,007FFCR0IF,007FFCR0IF8,007FF8R07FF8,00IFS03FF8,00IFS03FFC,:00FFES01FFC,01FFES01FFC,01FFES01FFE,:01FFCS01FFE,:::::01FFES01FFE,::01FFES03FFE,01IFS03FFE,01IFS03FFC,01IF8R07FFC,00IF8R0IFC,00IFCR0IFC,00IFEQ01IFC,00JFQ03IF8,007IF8P07IF8,007IFCP0JF8,007JFO03JF,003F87FCN0KF,003F81FFM03JFE,001F80FFEK01KFE,001FC07FFCJ0LFC,I0FF03FF8J0LFC,I0FF03FF8J07KF8,I07F81FF8J07KF8,I03F807F8J07KF,I03FC004K07JFE,I01FCN07JFE,J0FEN07JFC,J07FN07JF8,J03F8M07JF,J01FCM07IFE,K0FFM07IFC,K07IF8J07IF8,K03IF8J07IF,L0IF8J07FFC,L07FF8J07FF8,L01FF8J07FE,M0FF8J07F8,M01F8J07E,N07K038,,::::::::::::::^FS"
|
46
|
+
raw_zpl = Zebra::Zpl::Raw.new(
|
47
|
+
data: zpl_string,
|
48
|
+
position: [50, 50],
|
49
|
+
)
|
50
|
+
label << raw_zpl
|
51
|
+
print_zpl_str('raw_zpl', label)
|
52
|
+
|
53
|
+
################################################################################
|
54
|
+
# Barcode
|
55
|
+
################################################################################
|
56
|
+
label = new_label
|
57
|
+
barcode = Zebra::Zpl::Barcode.new(
|
58
|
+
data: 'F112358',
|
59
|
+
position: [80, 50],
|
60
|
+
height: 150,
|
61
|
+
width: 4,
|
62
|
+
print_human_readable_code: true,
|
63
|
+
type: Zebra::Zpl::BarcodeType::CODE_128_AUTO
|
64
|
+
)
|
65
|
+
label << barcode
|
66
|
+
print_zpl_str('barcode', label)
|
67
|
+
|
68
|
+
################################################################################
|
69
|
+
# QR Code
|
70
|
+
################################################################################
|
71
|
+
label = new_label
|
72
|
+
qrcode = Zebra::Zpl::Qrcode.new(
|
73
|
+
data: 'www.github.com',
|
74
|
+
position: [200, 45],
|
75
|
+
scale_factor: 8,
|
76
|
+
correction_level: 'H',
|
77
|
+
)
|
78
|
+
label << qrcode
|
79
|
+
print_zpl_str('qrcode', label)
|
80
|
+
|
81
|
+
################################################################################
|
82
|
+
# Data Matrix
|
83
|
+
################################################################################
|
84
|
+
label = new_label
|
85
|
+
datamatrix = Zebra::Zpl::Datamatrix.new(
|
86
|
+
data: 'www.github.com',
|
87
|
+
position: [225, 75],
|
88
|
+
symbol_height: 10,
|
89
|
+
aspect_ratio: 1
|
90
|
+
)
|
91
|
+
label << datamatrix
|
92
|
+
print_zpl_str('datamatrix', label)
|
93
|
+
|
94
|
+
################################################################################
|
95
|
+
# Graphics
|
96
|
+
################################################################################
|
97
|
+
label = new_label
|
98
|
+
box = Zebra::Zpl::Graphic.new(
|
99
|
+
graphic_type: 'B',
|
100
|
+
position: [10,10],
|
101
|
+
graphic_width: 80,
|
102
|
+
graphic_height: 80,
|
103
|
+
line_thickness: 2,
|
104
|
+
rounding_degree: 2
|
105
|
+
)
|
106
|
+
circle = Zebra::Zpl::Graphic.new(
|
107
|
+
graphic_type: 'C',
|
108
|
+
position: [100,10],
|
109
|
+
graphic_width: 80,
|
110
|
+
line_thickness: 3
|
111
|
+
)
|
112
|
+
diagonal1 = Zebra::Zpl::Graphic.new(
|
113
|
+
graphic_type: 'D',
|
114
|
+
position: [190,10],
|
115
|
+
graphic_width: 80,
|
116
|
+
graphic_height: 80,
|
117
|
+
line_thickness: 3,
|
118
|
+
orientation: 'R'
|
119
|
+
)
|
120
|
+
diagonal2 = diagonal1.dup
|
121
|
+
diagonal2.orientation = 'L'
|
122
|
+
ellipse = Zebra::Zpl::Graphic.new(
|
123
|
+
graphic_type: 'E',
|
124
|
+
position: [280,10],
|
125
|
+
graphic_width: 40,
|
126
|
+
graphic_height: 80,
|
127
|
+
line_thickness: 3
|
128
|
+
)
|
129
|
+
symbol = Zebra::Zpl::Graphic.new(
|
130
|
+
graphic_type: 'S',
|
131
|
+
symbol_type: 'B',
|
132
|
+
position: [335,10],
|
133
|
+
graphic_width: 80,
|
134
|
+
graphic_height: 80
|
135
|
+
)
|
136
|
+
|
137
|
+
label << box
|
138
|
+
label << circle
|
139
|
+
label << diagonal1
|
140
|
+
label << diagonal2
|
141
|
+
label << ellipse
|
142
|
+
label << symbol
|
143
|
+
label.elements.each { |e| e.position = [e.x + 110 , e.y + 90] }
|
144
|
+
print_zpl_str('graphics', label)
|
145
|
+
|
146
|
+
################################################################################
|
147
|
+
# Images
|
148
|
+
################################################################################
|
149
|
+
label = new_label
|
150
|
+
image = Zebra::Zpl::Image.new(
|
151
|
+
path: File.expand_path('./images/earth.jpg', File.dirname(__FILE__)),
|
152
|
+
position: [145, 0],
|
153
|
+
width: 305,
|
154
|
+
height: 305
|
155
|
+
)
|
156
|
+
label << image
|
157
|
+
print_zpl_str('image', label)
|
158
|
+
|
159
|
+
# inverted image
|
160
|
+
label = new_label
|
161
|
+
image = Zebra::Zpl::Image.new(
|
162
|
+
path: File.expand_path('./images/earth.jpg', File.dirname(__FILE__)),
|
163
|
+
position: [145, 0],
|
164
|
+
width: 305,
|
165
|
+
height: 305,
|
166
|
+
invert: true
|
167
|
+
)
|
168
|
+
label << image
|
169
|
+
print_zpl_str('image_inverted', label)
|
170
|
+
|
171
|
+
################################################################################
|
172
|
+
# Image Manipulation
|
173
|
+
################################################################################
|
174
|
+
label = new_label
|
175
|
+
image = Zebra::Zpl::Image.new(
|
176
|
+
path: File.expand_path('./images/ruby.png', File.dirname(__FILE__)),
|
177
|
+
position: [0, 0],
|
178
|
+
width: 305,
|
179
|
+
height: 305,
|
180
|
+
black_threshold: 0.65
|
181
|
+
)
|
182
|
+
src = image.source
|
183
|
+
src.background('white').flatten
|
184
|
+
|
185
|
+
# perform edge detection on the image
|
186
|
+
MiniMagick::Tool::Convert.new do |convert|
|
187
|
+
convert << src.path
|
188
|
+
convert << '-colorspace' << 'gray'
|
189
|
+
convert << '-edge' << '4'
|
190
|
+
convert << '-negate'
|
191
|
+
convert << src.path
|
192
|
+
end
|
193
|
+
|
194
|
+
src.trim
|
195
|
+
|
196
|
+
label << image
|
197
|
+
print_zpl_str('image_manipulation', label)
|
198
|
+
|
199
|
+
################################################################################
|
200
|
+
# Justification
|
201
|
+
################################################################################
|
202
|
+
label = new_label
|
203
|
+
t1 = Zebra::Zpl::Text.new(
|
204
|
+
data: "ZPL",
|
205
|
+
position: [10, 25],
|
206
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
207
|
+
justification: Zebra::Zpl::Justification::LEFT
|
208
|
+
)
|
209
|
+
t2 = Zebra::Zpl::Text.new(
|
210
|
+
data: "ZPL",
|
211
|
+
position: [10, 65],
|
212
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
213
|
+
justification: Zebra::Zpl::Justification::CENTER
|
214
|
+
)
|
215
|
+
t3 = Zebra::Zpl::Text.new(
|
216
|
+
data: "ZPL",
|
217
|
+
position: [10, 105],
|
218
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
219
|
+
justification: Zebra::Zpl::Justification::RIGHT
|
220
|
+
)
|
221
|
+
t4 = Zebra::Zpl::Text.new(
|
222
|
+
data: "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua",
|
223
|
+
position: [10, 180],
|
224
|
+
font_size: Zebra::Zpl::FontSize::SIZE_4,
|
225
|
+
justification: Zebra::Zpl::Justification::JUSTIFIED
|
226
|
+
)
|
227
|
+
box = Zebra::Zpl::Graphic.new(
|
228
|
+
graphic_type: 'B',
|
229
|
+
position: [10,5],
|
230
|
+
graphic_width: label.width,
|
231
|
+
graphic_height: label.length-10,
|
232
|
+
line_thickness: 1,
|
233
|
+
rounding_degree: 1
|
234
|
+
)
|
235
|
+
label << t1
|
236
|
+
label << t2
|
237
|
+
label << t3
|
238
|
+
label << t4
|
239
|
+
label << box
|
240
|
+
print_zpl_str('justification', label)
|
241
|
+
|
242
|
+
################################################################################
|
243
|
+
# Rotation
|
244
|
+
################################################################################
|
245
|
+
label = new_label
|
246
|
+
t1 = Zebra::Zpl::Text.new(
|
247
|
+
data: "Zero",
|
248
|
+
position: [10, 125],
|
249
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
250
|
+
rotation: Zebra::Zpl::Rotation::NO_ROTATION,
|
251
|
+
max_lines: 1
|
252
|
+
)
|
253
|
+
t2 = Zebra::Zpl::Text.new(
|
254
|
+
data: "90",
|
255
|
+
position: [100, 125],
|
256
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
257
|
+
rotation: Zebra::Zpl::Rotation::DEGREES_90,
|
258
|
+
max_lines: 1
|
259
|
+
)
|
260
|
+
t3 = Zebra::Zpl::Text.new(
|
261
|
+
data: "180",
|
262
|
+
position: [175, 125],
|
263
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
264
|
+
rotation: Zebra::Zpl::Rotation::DEGREES_180,
|
265
|
+
justification: Zebra::Zpl::Justification::RIGHT,
|
266
|
+
max_lines: 1
|
267
|
+
)
|
268
|
+
t4 = Zebra::Zpl::Text.new(
|
269
|
+
data: "270",
|
270
|
+
position: [275, 125],
|
271
|
+
font_size: Zebra::Zpl::FontSize::SIZE_5,
|
272
|
+
rotation: Zebra::Zpl::Rotation::DEGREES_270,
|
273
|
+
justification: Zebra::Zpl::Justification::RIGHT,
|
274
|
+
max_lines: 1
|
275
|
+
)
|
276
|
+
box = Zebra::Zpl::Graphic.new(
|
277
|
+
graphic_type: 'B',
|
278
|
+
position: [10,5],
|
279
|
+
graphic_width: label.width,
|
280
|
+
graphic_height: label.length-10,
|
281
|
+
line_thickness: 1,
|
282
|
+
rounding_degree: 1
|
283
|
+
)
|
284
|
+
label << t1
|
285
|
+
label << t2
|
286
|
+
label << t3
|
287
|
+
label << t4
|
288
|
+
label.elements.each { |e| e.position = [e.x + 150, e.y] }
|
289
|
+
label << box
|
290
|
+
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
|
Binary file
|
data/lib/zebra/print_job.rb
CHANGED
@@ -1,35 +1,37 @@
|
|
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
|
-
def print(label, ip)
|
10
|
+
def print(label, ip, print_service: "")
|
18
11
|
@remote_ip = ip
|
19
|
-
|
20
|
-
|
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
|
19
|
+
send_to_printer(tempfile.path, print_service)
|
21
20
|
end
|
22
21
|
|
23
22
|
private
|
24
23
|
|
25
|
-
|
26
|
-
# existent_printers = Cups.show_destinations
|
27
|
-
# raise UnknownPrinter.new(printer) unless existent_printers.include?(printer)
|
28
|
-
# end
|
29
|
-
|
30
|
-
def send_to_printer(path)
|
24
|
+
def send_to_printer(path, print_service)
|
31
25
|
puts "* * * * * * * * * * * * Sending file to printer #{@printer} at #{@remote_ip} * * * * * * * * * * "
|
32
|
-
|
26
|
+
case print_service
|
27
|
+
when "rlpr"
|
28
|
+
system("rlpr -H #{@remote_ip} -P #{@printer} -o #{path} 2>&1") # try printing to LPD on windows machine
|
29
|
+
when "lp"
|
30
|
+
system("lp -h #{@remote_ip} -d #{@printer} -o raw #{path}") # print to unix (CUPS) using lp
|
31
|
+
else
|
32
|
+
result = system("rlpr -H #{@remote_ip} -P #{@printer} -o #{path} 2>&1") # try printing to LPD on windows machine first
|
33
|
+
system("lp -h #{@remote_ip} -d #{@printer} -o raw #{path}") if !result # print to unix (CUPS) if rlpr failed
|
34
|
+
end
|
33
35
|
end
|
34
36
|
end
|
35
37
|
end
|
data/lib/zebra/zpl.rb
CHANGED
@@ -1,18 +1,26 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
|
4
|
-
require
|
5
|
-
|
6
|
-
require
|
7
|
-
require
|
8
|
-
require
|
9
|
-
require
|
10
|
-
require
|
11
|
-
require
|
12
|
-
require
|
13
|
-
require
|
14
|
-
require
|
15
|
-
require
|
16
|
-
require
|
17
|
-
require
|
18
|
-
require
|
1
|
+
require 'img2zpl'
|
2
|
+
require 'tempfile'
|
3
|
+
|
4
|
+
require 'zebra/print_job'
|
5
|
+
|
6
|
+
require 'zebra/zpl/barcode_type'
|
7
|
+
require 'zebra/zpl/barcode'
|
8
|
+
require 'zebra/zpl/box'
|
9
|
+
require 'zebra/zpl/character_set'
|
10
|
+
require 'zebra/zpl/comment'
|
11
|
+
require 'zebra/zpl/country_code'
|
12
|
+
require 'zebra/zpl/datamatrix'
|
13
|
+
require 'zebra/zpl/font'
|
14
|
+
require 'zebra/zpl/graphic'
|
15
|
+
require 'zebra/zpl/image'
|
16
|
+
require 'zebra/zpl/justification'
|
17
|
+
require 'zebra/zpl/label'
|
18
|
+
require 'zebra/zpl/language'
|
19
|
+
require 'zebra/zpl/multipliers'
|
20
|
+
require 'zebra/zpl/pdf417'
|
21
|
+
require 'zebra/zpl/print_mode'
|
22
|
+
require 'zebra/zpl/qrcode'
|
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
|