zebra_printer 0.1.1
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 +7 -0
- data/.document +5 -0
- data/.rspec +3 -0
- data/.travis.yml +6 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +85 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +26 -0
- data/Rakefile +50 -0
- data/VERSION +1 -0
- data/features/ascii-text-rotation.feature +48 -0
- data/features/ascii-text-simple.feature +31 -0
- data/features/ascii-text-size.feature +44 -0
- data/features/barcode-code128.feature +59 -0
- data/features/barcode-datamatrix.feature +62 -0
- data/features/data.feature +17 -0
- data/features/position-epl2.feature +59 -0
- data/features/position-zpl2.feature +64 -0
- data/features/step_definitions/dsl_steps.rb +22 -0
- data/features/step_definitions/language_steps.rb +4 -0
- data/features/step_definitions/output_steps.rb +9 -0
- data/features/support/env.rb +1 -0
- data/lib/document_value.rb +4 -0
- data/lib/languages/epl2/barcode.rb +50 -0
- data/lib/languages/epl2/document.rb +27 -0
- data/lib/languages/epl2/font.rb +48 -0
- data/lib/languages/epl2/position.rb +11 -0
- data/lib/languages/epl2/text.rb +27 -0
- data/lib/languages/epl2.rb +78 -0
- data/lib/languages/generic/dots.rb +37 -0
- data/lib/languages/generic/integer.rb +5 -0
- data/lib/languages/generic/millimetres.rb +60 -0
- data/lib/languages/generic/position.rb +64 -0
- data/lib/languages/generic.rb +7 -0
- data/lib/languages/zpl2/barcode.rb +48 -0
- data/lib/languages/zpl2/document.rb +27 -0
- data/lib/languages/zpl2/font.rb +52 -0
- data/lib/languages/zpl2/position.rb +11 -0
- data/lib/languages/zpl2/text.rb +15 -0
- data/lib/languages/zpl2.rb +76 -0
- data/lib/languages.rb +8 -0
- data/lib/utils/array.rb +5 -0
- data/lib/zebra_printer.rb +4 -0
- data/lib/zebra_printer_document.rb +47 -0
- data/spec/lib/languages/epl2/barcode_1d_spec.rb +19 -0
- data/spec/lib/languages/epl2/barcode_2d_spec.rb +11 -0
- data/spec/lib/languages/epl2/barcode_factory_spec.rb +17 -0
- data/spec/lib/languages/epl2/document_spec.rb +23 -0
- data/spec/lib/languages/epl2/font_spec.rb +49 -0
- data/spec/lib/languages/epl2/position_spec.rb +9 -0
- data/spec/lib/languages/epl2/text_spec.rb +17 -0
- data/spec/lib/languages/generic/dots.rb +18 -0
- data/spec/lib/languages/generic/millimetres.rb +36 -0
- data/spec/lib/languages/generic/position_spec.rb +24 -0
- data/spec/lib/languages/languages.rb +18 -0
- data/spec/lib/languages/zpl2/barcode1d_spec.rb +18 -0
- data/spec/lib/languages/zpl2/barcode2d_spec.rb +11 -0
- data/spec/lib/languages/zpl2/barcode_factory_spec.rb +17 -0
- data/spec/lib/languages/zpl2/document_spec.rb +23 -0
- data/spec/lib/languages/zpl2/font_spec.rb +49 -0
- data/spec/lib/languages/zpl2/position_spec.rb +10 -0
- data/spec/lib/languages/zpl2/text_spec.rb +6 -0
- data/spec/lib/zebra_printer_document.rb +40 -0
- data/spec/spec_helper.rb +16 -0
- data/zebra_printer.gemspec +119 -0
- metadata +193 -0
@@ -0,0 +1,50 @@
|
|
1
|
+
module Languages
|
2
|
+
class Epl2
|
3
|
+
class BarcodeFactory
|
4
|
+
def self.create_barcode(code_type, opts = {})
|
5
|
+
if Barcode1D::BarcodeClasses.keys.include? code_type
|
6
|
+
Barcode1D.new code_type, opts
|
7
|
+
elsif Barcode2D::BarcodeClasses.keys.include? code_type
|
8
|
+
Barcode2D.new code_type, opts
|
9
|
+
else
|
10
|
+
raise ArgumentException.new("Unknown barcode: #{code_type}")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
class Barcode1D
|
15
|
+
BarcodeClasses = {
|
16
|
+
code_128: ["1",2,2,50,"B"],
|
17
|
+
ean13: ["E30",2,2,50,"B"]
|
18
|
+
}
|
19
|
+
def initialize(code_type, opts = {})
|
20
|
+
@font = opts[:font] || Font.new
|
21
|
+
#defaults
|
22
|
+
@type,@nb_width,@wb_width,@height,@human_readable = BarcodeClasses[code_type]
|
23
|
+
opts[:at] = [0,0] unless opts.has_key? :at
|
24
|
+
@x, @y = opts[:at].pop(2)
|
25
|
+
@text = opts[:text] || ""
|
26
|
+
end
|
27
|
+
|
28
|
+
def render
|
29
|
+
"B#{@x},#{@y},#{@font.rotation},#{@type},#{@nb_width},#{@wb_width},#{@height},#{@human_readable},\"#{@text}\""
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class Barcode2D
|
34
|
+
BarcodeClasses = {
|
35
|
+
data_matrix: ["D",16,16]
|
36
|
+
}
|
37
|
+
def initialize(code_type, opts = {})
|
38
|
+
@font = opts[:font] || Font.new
|
39
|
+
@type,@columns_encode,@rows_encode = BarcodeClasses[code_type]
|
40
|
+
@x = (opts[:at] || [0,0])[0]
|
41
|
+
@y = (opts[:at] || [0,0])[1]
|
42
|
+
@text = opts[:text] || ""
|
43
|
+
end
|
44
|
+
|
45
|
+
def render
|
46
|
+
"b#{@x},#{@y},#{@type},c#{@columns_encode},r#{@rows_encode},\"#{@text}\""
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Languages
|
2
|
+
class Epl2
|
3
|
+
class Document
|
4
|
+
def initialize
|
5
|
+
@document = document_start.concat "\n"
|
6
|
+
end
|
7
|
+
|
8
|
+
def <<(obj)
|
9
|
+
string = obj.is_a?(String) ? obj : obj.render
|
10
|
+
string.concat "\n" unless string.end_with? "\n"
|
11
|
+
@document.concat string
|
12
|
+
end
|
13
|
+
|
14
|
+
def render
|
15
|
+
@document.concat(document_end).concat("\n")
|
16
|
+
end
|
17
|
+
|
18
|
+
def document_start
|
19
|
+
"N\n"
|
20
|
+
end
|
21
|
+
|
22
|
+
def document_end
|
23
|
+
"P1\n"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Languages
|
2
|
+
class Epl2
|
3
|
+
class Font
|
4
|
+
attr_reader :name, :rotation, :height, :width
|
5
|
+
|
6
|
+
def initialize(opts = {})
|
7
|
+
# defaults
|
8
|
+
@name = opts[:name] || "2"
|
9
|
+
@rotation = opts.include?(:rotation) ? font_rotation(opts[:rotation]) : font_rotation(:by_0)
|
10
|
+
@height = opts[:height] || 1
|
11
|
+
@width = opts[:width] || 1
|
12
|
+
@name, @height, @width = font_size(opts[:size]) if opts.include?(:size)
|
13
|
+
end
|
14
|
+
|
15
|
+
def font_size(val)
|
16
|
+
case val
|
17
|
+
when :normal
|
18
|
+
[2,1,1]
|
19
|
+
when :small
|
20
|
+
[1,1,1]
|
21
|
+
when :large
|
22
|
+
[3,1,1]
|
23
|
+
when :x_large
|
24
|
+
[4,1,1]
|
25
|
+
else
|
26
|
+
[2,1,1]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def font_rotation(amount)
|
31
|
+
@rotation = case(amount)
|
32
|
+
when :by_90
|
33
|
+
1
|
34
|
+
when :by_180
|
35
|
+
2
|
36
|
+
when :by_270
|
37
|
+
3
|
38
|
+
else
|
39
|
+
0
|
40
|
+
end
|
41
|
+
end
|
42
|
+
def render
|
43
|
+
""
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Languages
|
2
|
+
class Epl2
|
3
|
+
class Text
|
4
|
+
attr_accessor :font, :text, :position
|
5
|
+
|
6
|
+
def initialize(opts = {})
|
7
|
+
# FIXME
|
8
|
+
@position = Languages::Epl2::Position[0,0]
|
9
|
+
@font = opts[:font] || Epl2::Font.new
|
10
|
+
@position = Languages::Epl2::Position.from_array(opts[:at]) if opts.has_key?(:at)
|
11
|
+
@text = ""
|
12
|
+
end
|
13
|
+
|
14
|
+
def render
|
15
|
+
"A#{@position},#{@font.rotation},#{@font.name},#{@font.height},#{@font.width},N,\"#{@text}\""
|
16
|
+
end
|
17
|
+
|
18
|
+
def x=(x)
|
19
|
+
@position.x = x
|
20
|
+
end
|
21
|
+
|
22
|
+
def y=(y)
|
23
|
+
@position.y = y
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require_relative 'epl2/font'
|
2
|
+
require_relative 'epl2/document'
|
3
|
+
require_relative 'epl2/text'
|
4
|
+
require_relative 'epl2/position'
|
5
|
+
require_relative 'epl2/barcode'
|
6
|
+
require_relative 'epl2/position'
|
7
|
+
require_relative '../utils/array'
|
8
|
+
|
9
|
+
module Languages
|
10
|
+
class Epl2
|
11
|
+
def initialize
|
12
|
+
@document = Epl2::Document.new
|
13
|
+
#defaults
|
14
|
+
@font = Epl2::Font.new
|
15
|
+
@position = Epl2::Position[0,0]
|
16
|
+
end
|
17
|
+
|
18
|
+
def document
|
19
|
+
@document.render
|
20
|
+
end
|
21
|
+
|
22
|
+
def text(value,opts={})
|
23
|
+
if opts.include? :at
|
24
|
+
opts[:at] = (@position + Epl2::Position.from_array(opts[:at])).to_a
|
25
|
+
else
|
26
|
+
opts[:at] = @position.to_a
|
27
|
+
end
|
28
|
+
@document << Epl2::Text.new(:font => @font, :at => opts[:at], :text => value)
|
29
|
+
end
|
30
|
+
|
31
|
+
def rotate(amount,&block)
|
32
|
+
if block_given?
|
33
|
+
save = @font
|
34
|
+
@font.font_rotation amount
|
35
|
+
self.instance_eval(&block)
|
36
|
+
@font = save
|
37
|
+
else
|
38
|
+
@font.font_rotation amount
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def font(opts={},&block)
|
43
|
+
if opts.include? :size
|
44
|
+
@font = Epl2::Font.new(opts)
|
45
|
+
end
|
46
|
+
if block_given?
|
47
|
+
save = @font
|
48
|
+
@font = Epl2::Font.new(opts)
|
49
|
+
self.instance_eval(&block)
|
50
|
+
@font = save
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def barcode(*args)
|
55
|
+
opts = args.extract_options!
|
56
|
+
code,text = args.pop 2
|
57
|
+
|
58
|
+
opts = opts.merge({:font => font,:text =>text})
|
59
|
+
if opts.include? :at
|
60
|
+
opts[:at] = (@position + Epl2::Position.from_array(opts[:at])).to_a
|
61
|
+
end
|
62
|
+
|
63
|
+
b = Epl2::BarcodeFactory.create_barcode code,opts
|
64
|
+
@document << b.render
|
65
|
+
end
|
66
|
+
|
67
|
+
def position(x,y,&block)
|
68
|
+
if block_given?
|
69
|
+
save = @position
|
70
|
+
@position = Epl2::Position[x,y]
|
71
|
+
self.instance_eval(&block)
|
72
|
+
@position = save
|
73
|
+
else
|
74
|
+
@position = Epl2::Position[x,y]
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Languages
|
2
|
+
module Generic
|
3
|
+
class Dots
|
4
|
+
def initialize(int)
|
5
|
+
@int = int
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_i
|
9
|
+
@int
|
10
|
+
end
|
11
|
+
|
12
|
+
def +(other)
|
13
|
+
self.class.new(@int + value_of(other))
|
14
|
+
end
|
15
|
+
|
16
|
+
def -(other)
|
17
|
+
self.class.new(@int - value_of(other))
|
18
|
+
end
|
19
|
+
|
20
|
+
def ==(other)
|
21
|
+
@int == value_of(other)
|
22
|
+
end
|
23
|
+
|
24
|
+
def to_dots
|
25
|
+
self
|
26
|
+
end
|
27
|
+
|
28
|
+
def to_s
|
29
|
+
@int.to_s
|
30
|
+
end
|
31
|
+
private
|
32
|
+
def value_of(other)
|
33
|
+
v = other.respond_to?(:to_dots) ? other.to_dots.to_i : other.to_i
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Languages
|
2
|
+
module Generic
|
3
|
+
class Millimetres
|
4
|
+
def initialize(int)
|
5
|
+
@int = int
|
6
|
+
end
|
7
|
+
|
8
|
+
def to_i
|
9
|
+
@int
|
10
|
+
end
|
11
|
+
|
12
|
+
def +(other)
|
13
|
+
if other.is_a? Millimetres
|
14
|
+
self.class.new(@int + other.to_i)
|
15
|
+
elsif other.is_a? Integer
|
16
|
+
self.class.new(@int + other)
|
17
|
+
else
|
18
|
+
if other.respond_to? :coerce
|
19
|
+
a,b = other.coerce(self)
|
20
|
+
a + b
|
21
|
+
else
|
22
|
+
raise TypeError, "#{other.class} can't be coerced into #{self.class.name}"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def -(other)
|
28
|
+
if other.is_a? Millimetres
|
29
|
+
self.class.new(@int - other.to_i)
|
30
|
+
elsif other.is_a? Integer
|
31
|
+
self.class.new(@int - other)
|
32
|
+
else
|
33
|
+
if other.respond_to? :coerce
|
34
|
+
a,b = other.coerce(self)
|
35
|
+
a - b
|
36
|
+
else
|
37
|
+
raise TypeError, "#{other.class} can't be coerced into #{self.class.name}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def ==(other)
|
43
|
+
@int == other.to_i
|
44
|
+
end
|
45
|
+
|
46
|
+
def coerce(other)
|
47
|
+
[Millimetres.new(other),self]
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_dots(ratio = :dpi203)
|
51
|
+
dpm = if ratio == :dpi203
|
52
|
+
(203/25.4)
|
53
|
+
else
|
54
|
+
(300/25.4)
|
55
|
+
end
|
56
|
+
Languages::Generic::Dots.new((@int * dpm).round)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Languages
|
2
|
+
module Generic
|
3
|
+
module Position
|
4
|
+
def self.included(base)
|
5
|
+
base.extend ClassMethods
|
6
|
+
end
|
7
|
+
|
8
|
+
module ClassMethods
|
9
|
+
def [](x,y)
|
10
|
+
o = new
|
11
|
+
o.x,o.y = x,y
|
12
|
+
o
|
13
|
+
end
|
14
|
+
|
15
|
+
def from_array(ary)
|
16
|
+
x, y = ary.pop(2)
|
17
|
+
x = Languages::Generic::Dots.new(x) if x.is_a? Integer
|
18
|
+
y = Languages::Generic::Dots.new(y) if y.is_a? Integer
|
19
|
+
o = new
|
20
|
+
o.x,o.y = x,y
|
21
|
+
o
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_accessor :x, :y
|
26
|
+
|
27
|
+
|
28
|
+
def +(v)
|
29
|
+
case v
|
30
|
+
when Position
|
31
|
+
self.class[x+v.x,y+v.y]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def ==(v)
|
36
|
+
(x==v.x) && (y==v.y)
|
37
|
+
end
|
38
|
+
|
39
|
+
def x=(x)
|
40
|
+
if x.is_a? Integer
|
41
|
+
@x = Languages::Generic::Dots.new(x) if x.is_a? Integer
|
42
|
+
else
|
43
|
+
@x = x
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def y=(y)
|
48
|
+
if y.is_a? Integer
|
49
|
+
@y = Languages::Generic::Dots.new(y) if y.is_a? Integer
|
50
|
+
else
|
51
|
+
@y = y
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def to_a
|
56
|
+
[x,y]
|
57
|
+
end
|
58
|
+
|
59
|
+
def to_s
|
60
|
+
"#{x.to_dots},#{y.to_dots}"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Languages
|
2
|
+
class Zpl2
|
3
|
+
class BarcodeFactory
|
4
|
+
def self.create_barcode(code_type, opts = {})
|
5
|
+
if Barcode1D::BarcodeClasses.keys.include? code_type
|
6
|
+
Barcode1D.new code_type,opts
|
7
|
+
elsif Barcode2D::BarcodeClasses.keys.include? code_type
|
8
|
+
Barcode2D.new code_type,opts
|
9
|
+
else
|
10
|
+
raise ArgumentException.new("Unknown barcode: #{code_type}")
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class Barcode1D
|
16
|
+
BarcodeClasses = {
|
17
|
+
code_128: "BC",
|
18
|
+
ean13: "BE"
|
19
|
+
}
|
20
|
+
def initialize(code_type, opts = {})
|
21
|
+
@code = BarcodeClasses[code_type]
|
22
|
+
@font = opts[:font] || Font.new
|
23
|
+
@human_readable = opts[:human_readable] || "Y"
|
24
|
+
@text = opts[:text] || ""
|
25
|
+
end
|
26
|
+
|
27
|
+
def render
|
28
|
+
"^#{@code}#{@font.rotation},#{@font.height*2},#{@human_readable},N,N^FD#{@text}^FS"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
class Barcode2D
|
33
|
+
BarcodeClasses = {
|
34
|
+
data_matrix: ["X",4,16,16]
|
35
|
+
}
|
36
|
+
|
37
|
+
def initialize(code_type, opts = {})
|
38
|
+
@font = opts[:font] || Font.new
|
39
|
+
@code, @symbol_height, @columns_encode, @rows_encode = BarcodeClasses[code_type]
|
40
|
+
@text = opts[:text] || ""
|
41
|
+
end
|
42
|
+
|
43
|
+
def render
|
44
|
+
"^B#{@code}#{@font.rotation},#{@symbol_height},200,#{@columns_encode},#{@rows_encode}^FD#{@text}^FS"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Languages
|
2
|
+
class Zpl2
|
3
|
+
class Document
|
4
|
+
def initialize
|
5
|
+
@document = document_start.concat "\n"
|
6
|
+
end
|
7
|
+
|
8
|
+
def <<(obj)
|
9
|
+
string = obj.is_a?(String) ? obj : obj.render
|
10
|
+
string.concat "\n" unless string.end_with? "\n"
|
11
|
+
@document.concat string
|
12
|
+
end
|
13
|
+
|
14
|
+
def render
|
15
|
+
@document.concat(document_end).concat("\n")
|
16
|
+
end
|
17
|
+
|
18
|
+
def document_start
|
19
|
+
"^XA"
|
20
|
+
end
|
21
|
+
|
22
|
+
def document_end
|
23
|
+
"^XZ"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Languages
|
2
|
+
class Zpl2
|
3
|
+
class Font
|
4
|
+
attr_reader :name, :rotation, :height, :width
|
5
|
+
|
6
|
+
def initialize(opts = {})
|
7
|
+
# defaults
|
8
|
+
@name = opts[:name] || "B"
|
9
|
+
@rotation = opts.include?(:rotation) ? font_rotation(opts[:rotation]) : font_rotation(:by_0)
|
10
|
+
@height = opts[:height] || 15
|
11
|
+
@width = opts[:width] || 12
|
12
|
+
@name, @height, @width = font_size(opts[:size]) if opts.include?(:size)
|
13
|
+
@code = "^CF"
|
14
|
+
end
|
15
|
+
|
16
|
+
def font_args(opts={})
|
17
|
+
@name = font_size(opts[:size]) if opts.include? :size
|
18
|
+
end
|
19
|
+
|
20
|
+
def font_size(val)
|
21
|
+
case val
|
22
|
+
when :normal
|
23
|
+
["0",25,25]
|
24
|
+
when :small
|
25
|
+
["0",20,20]
|
26
|
+
when :large
|
27
|
+
["0",40,40]
|
28
|
+
when :x_large
|
29
|
+
["0",60,60]
|
30
|
+
else
|
31
|
+
["0",25,25]
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def font_rotation(amount)
|
36
|
+
@rotation = case(amount)
|
37
|
+
when :by_90
|
38
|
+
"R"
|
39
|
+
when :by_180
|
40
|
+
"I"
|
41
|
+
when :by_270
|
42
|
+
"B"
|
43
|
+
else
|
44
|
+
"N"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
def render
|
48
|
+
"^CF#{@name}#{@rotation},#{@height},#{@width}\n"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
require_relative 'zpl2/font'
|
2
|
+
require_relative 'zpl2/document'
|
3
|
+
require_relative 'zpl2/text'
|
4
|
+
require_relative 'zpl2/position'
|
5
|
+
require_relative 'zpl2/barcode'
|
6
|
+
|
7
|
+
module Languages
|
8
|
+
class Zpl2
|
9
|
+
def initialize
|
10
|
+
@document = Zpl2::Document.new
|
11
|
+
@font = Zpl2::Font.new
|
12
|
+
@position = Zpl2::Position[0,0]
|
13
|
+
@document << @position
|
14
|
+
end
|
15
|
+
|
16
|
+
def text(text,opts={})
|
17
|
+
if opts.include? :at
|
18
|
+
@document << (@position + Zpl2::Position.from_array(opts[:at]))
|
19
|
+
end
|
20
|
+
@document << Zpl2::Text.new(text)
|
21
|
+
@document << @position if opts.include?(:at)
|
22
|
+
end
|
23
|
+
|
24
|
+
def rotate(amount, &block)
|
25
|
+
if block_given?
|
26
|
+
@document << Zpl2::Font.new(:rotation => amount)
|
27
|
+
self.instance_eval &block
|
28
|
+
@document << @font
|
29
|
+
else
|
30
|
+
@font.font_rotation amount
|
31
|
+
@document << @font
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def font(opts={},&block)
|
36
|
+
if block_given?
|
37
|
+
@document << Zpl2::Font.new(opts)
|
38
|
+
self.instance_eval &block
|
39
|
+
@document << @font
|
40
|
+
else
|
41
|
+
@font = Zpl2::Font.new(opts)
|
42
|
+
@document << @font
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def barcode(*args)
|
47
|
+
opts = args.extract_options!
|
48
|
+
code,text = args.pop 2
|
49
|
+
|
50
|
+
opts = opts.merge({:font => @font,:text => text})
|
51
|
+
|
52
|
+
if opts.include? :at
|
53
|
+
@document << (@position + Zpl2::Position.from_array(opts[:at]))
|
54
|
+
end
|
55
|
+
|
56
|
+
@document << Zpl2::BarcodeFactory.create_barcode(code, opts)
|
57
|
+
end
|
58
|
+
|
59
|
+
def position(x,y,&block)
|
60
|
+
if block_given?
|
61
|
+
save = @position
|
62
|
+
@position = Zpl2::Position[x,y]
|
63
|
+
@document << @position
|
64
|
+
self.instance_eval(&block)
|
65
|
+
@position = save
|
66
|
+
else
|
67
|
+
@position = Zpl2::Position[x,y]
|
68
|
+
end
|
69
|
+
@document << @position
|
70
|
+
end
|
71
|
+
|
72
|
+
def document
|
73
|
+
@document.render
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
data/lib/languages.rb
ADDED
data/lib/utils/array.rb
ADDED