escpos 0.0.3 → 0.0.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 07e5de3027f521cd1b3ed0be7c34be9bc54fc9d5
4
- data.tar.gz: 0b48cb01f97e2e1bc77e4d8deb88711f3d163322
3
+ metadata.gz: fb7ee79d9d2c9a0bb174647d37bba0dc123f50ef
4
+ data.tar.gz: 217b77168da1f85b9e35fc60c03de5b1cfc4e21a
5
5
  SHA512:
6
- metadata.gz: 76c976c0f10b0b418d57971bbcba86850d01622efb0ef70585dd0ac393d14dbbab0b1cad7b0ec8c96acb6e1bf7456c853ed438251ca87863427c231990f87f73
7
- data.tar.gz: 7aa7b8cf020f4d2889b7f80fbceb9446dd0a5108dfa5b72615fb03f38b6a2c2ae1c2c14b4c4662c48d0198c5d6ee3de2cbe6abd88c4c48ea2c4b117e340b9bcf
6
+ metadata.gz: 26dbc112a89688ed3cff1abf4feff0dd87360b4d27393524dff4c04a59fcc6e4924d291149fb70e2c120c9d12e9b2aa051bdbbb34b408f5efcb9a688d4f894cb
7
+ data.tar.gz: f9defcbfa5b312537a8c41504d1e2f9d82a6dd762e3587f005ba39f56fc608e3db181be20065251adb7bfbb75d8ac95be475b4ddff005911695828e91a902775
data/README.md CHANGED
@@ -8,6 +8,9 @@ Add this line to your application's Gemfile:
8
8
 
9
9
  ```ruby
10
10
  gem 'escpos'
11
+
12
+ # see https://github.com/escpos/escpos-image
13
+ gem 'escpos-image' # add this if you want to print PNG images
11
14
  ```
12
15
 
13
16
  And then execute:
@@ -18,6 +21,12 @@ Or install it yourself as:
18
21
 
19
22
  $ gem install escpos
20
23
 
24
+ ## Examples
25
+
26
+ ![](https://github.com/escpos/escpos/blob/master/examples/IMG_20160608_001339_HDR.jpg)
27
+ ![](https://github.com/escpos/escpos/blob/master/examples/IMG_20160610_161302_HDR.jpg)
28
+ ![](https://github.com/escpos/escpos/blob/master/examples/IMG_20160610_204358_HDR.jpg)
29
+
21
30
  ## Usage
22
31
 
23
32
  ```ruby
@@ -64,8 +73,8 @@ report = MyReport.new 'path/to/my_report.erb'
64
73
 
65
74
  - text: Normal text formatting
66
75
  - double_height: Double height text
67
- - quad_text, big, title header, double_width_double_height, double_height_double_width: Double width & Double height text
68
- - double_width: Double iwdth text
76
+ - quad_text, big, title, header, double_width_double_height, double_height_double_width: Double width & Double height text
77
+ - double_width: Double width text
69
78
  - underline, u: Underlined text
70
79
  - underline2, u2: Stronger underlined text
71
80
  - bold, b: Bold text
@@ -2,37 +2,48 @@ module Escpos
2
2
  module Helpers
3
3
 
4
4
  # Encodes UTF-8 string to encoding acceptable for the printer
5
- # The printer must be set to that encoding, defaults to ISO-8859-2
5
+ # The printer must be set to that encoding
6
6
  # Available encodings can be listed in console using Encoding.constants
7
7
  def encode(data, opts = {})
8
- data.encode(opts.fetch(:encoding, 'ISO-8859-2'), 'UTF-8', {
8
+ data.encode(opts.fetch(:encoding), 'UTF-8', {
9
9
  invalid: opts.fetch(:invalid, :replace),
10
10
  undef: opts.fetch(:undef, :replace),
11
11
  replace: opts.fetch(:replace, '?')
12
12
  })
13
13
  end
14
14
 
15
+ # Set printer encoding
16
+ # example: encoding(Escpos::CP_ISO8859_2)
17
+ def encoding(data)
18
+ [
19
+ Escpos.sequence(Escpos::CP_SET),
20
+ Escpos.sequence(data)
21
+ ].join
22
+ end
23
+ alias :set_encoding :encoding
24
+ alias :set_printer_encoding :encoding
25
+
15
26
  def text(data)
16
27
  [
17
- Escpos.sequence(TXT_NORMAL),
28
+ Escpos.sequence(Escpos::TXT_NORMAL),
18
29
  data,
19
- Escpos.sequence(TXT_NORMAL),
30
+ Escpos.sequence(Escpos::TXT_NORMAL),
20
31
  ].join
21
32
  end
22
33
 
23
34
  def double_height(data)
24
35
  [
25
- Escpos.sequence(TXT_2HEIGHT),
36
+ Escpos.sequence(Escpos::TXT_2HEIGHT),
26
37
  data,
27
- Escpos.sequence(TXT_NORMAL),
38
+ Escpos.sequence(Escpos::TXT_NORMAL),
28
39
  ].join
29
40
  end
30
41
 
31
42
  def quad_text(data)
32
43
  [
33
- Escpos.sequence(TXT_4SQUARE),
44
+ Escpos.sequence(Escpos::TXT_4SQUARE),
34
45
  data,
35
- Escpos.sequence(TXT_NORMAL),
46
+ Escpos.sequence(Escpos::TXT_NORMAL),
36
47
  ].join
37
48
  end
38
49
  alias :big :quad_text
@@ -43,67 +54,76 @@ module Escpos
43
54
 
44
55
  def double_width(data)
45
56
  [
46
- Escpos.sequence(TXT_2WIDTH),
57
+ Escpos.sequence(Escpos::TXT_2WIDTH),
47
58
  data,
48
- Escpos.sequence(TXT_NORMAL),
59
+ Escpos.sequence(Escpos::TXT_NORMAL),
49
60
  ].join
50
61
  end
51
62
 
52
63
  def underline(data)
53
64
  [
54
- Escpos.sequence(TXT_UNDERL_ON),
65
+ Escpos.sequence(Escpos::TXT_UNDERL_ON),
55
66
  data,
56
- Escpos.sequence(TXT_UNDERL_OFF),
67
+ Escpos.sequence(Escpos::TXT_UNDERL_OFF),
57
68
  ].join
58
69
  end
59
70
  alias :u :underline
60
71
 
61
72
  def underline2(data)
62
73
  [
63
- Escpos.sequence(TXT_UNDERL2_ON),
74
+ Escpos.sequence(Escpos::TXT_UNDERL2_ON),
64
75
  data,
65
- Escpos.sequence(TXT_UNDERL_OFF),
76
+ Escpos.sequence(Escpos::TXT_UNDERL_OFF),
66
77
  ].join
67
78
  end
68
79
  alias :u2 :underline2
69
80
 
70
81
  def bold(data)
71
82
  [
72
- Escpos.sequence(TXT_BOLD_ON),
83
+ Escpos.sequence(Escpos::TXT_BOLD_ON),
73
84
  data,
74
- Escpos.sequence(TXT_BOLD_OFF),
85
+ Escpos.sequence(Escpos::TXT_BOLD_OFF),
75
86
  ].join
76
87
  end
77
88
  alias :b :bold
78
89
 
79
- def left(data)
90
+ def left(data = '')
91
+ [
92
+ Escpos.sequence(Escpos::TXT_ALIGN_LT),
93
+ data,
94
+ Escpos.sequence(Escpos::TXT_ALIGN_LT),
95
+ ].join
96
+ end
97
+
98
+ def right(data = '')
80
99
  [
81
- Escpos.sequence(TXT_ALIGN_LT),
100
+ Escpos.sequence(Escpos::TXT_ALIGN_RT),
82
101
  data,
83
- Escpos.sequence(TXT_ALIGN_LT),
102
+ Escpos.sequence(Escpos::TXT_ALIGN_LT),
84
103
  ].join
85
104
  end
86
105
 
87
- def right(data)
106
+ def center(data = '')
88
107
  [
89
- Escpos.sequence(TXT_ALIGN_RT),
108
+ Escpos.sequence(Escpos::TXT_ALIGN_CT),
90
109
  data,
91
- Escpos.sequence(TXT_ALIGN_LT),
110
+ Escpos.sequence(Escpos::TXT_ALIGN_LT),
92
111
  ].join
93
112
  end
94
113
 
95
- def center(data)
114
+ def inverted(data)
96
115
  [
97
- Escpos.sequence(TXT_ALIGN_CT),
116
+ Escpos.sequence(Escpos::TXT_INVERT_ON),
98
117
  data,
99
- Escpos.sequence(TXT_ALIGN_LT),
118
+ Escpos.sequence(Escpos::TXT_INVERT_OFF),
100
119
  ].join
101
120
  end
121
+ alias :invert :inverted
102
122
 
103
123
  def barcode(data, opts = {})
104
- text_position = opts.fetch(:text_position, BARCODE_TXT_OFF)
105
- unless [BARCODE_TXT_OFF, BARCODE_TXT_ABV, BARCODE_TXT_BLW, BARCODE_TXT_BTH].include?(text_position)
106
- raise ArgumentError("Text position must be one of the following: BARCODE_TXT_OFF, BARCODE_TXT_ABV, BARCODE_TXT_BLW, BARCODE_TXT_BTH.")
124
+ text_position = opts.fetch(:text_position, Escpos::BARCODE_TXT_OFF)
125
+ unless [Escpos::BARCODE_TXT_OFF, Escpos::BARCODE_TXT_ABV, Escpos::BARCODE_TXT_BLW, Escpos::BARCODE_TXT_BTH].include?(text_position)
126
+ raise ArgumentError("Text position must be one of the following: Escpos::BARCODE_TXT_OFF, Escpos::BARCODE_TXT_ABV, Escpos::BARCODE_TXT_BLW, Escpos::BARCODE_TXT_BTH.")
107
127
  end
108
128
  height = opts.fetch(:height, 50)
109
129
  raise ArgumentError("Height must be in range from 1 to 255.") if height && (height < 1 || height > 255)
@@ -111,21 +131,21 @@ module Escpos
111
131
  raise ArgumentError("Width must be in range from 2 to 6.") if width && (width < 2 || width > 6)
112
132
  [
113
133
  Escpos.sequence(text_position),
114
- Escpos.sequence(BARCODE_WIDTH),
134
+ Escpos.sequence(Escpos::BARCODE_WIDTH),
115
135
  Escpos.sequence([width]),
116
- Escpos.sequence(BARCODE_HEIGHT),
136
+ Escpos.sequence(Escpos::BARCODE_HEIGHT),
117
137
  Escpos.sequence([height]),
118
- Escpos.sequence(opts.fetch(:format, BARCODE_EAN13)),
138
+ Escpos.sequence(opts.fetch(:format, Escpos::BARCODE_EAN13)),
119
139
  data
120
140
  ].join
121
141
  end
122
142
 
123
143
  def partial_cut
124
- Escpos.sequence(PAPER_PARTIAL_CUT)
144
+ Escpos.sequence(Escpos::PAPER_PARTIAL_CUT)
125
145
  end
126
146
 
127
147
  def cut
128
- Escpos.sequence(PAPER_FULL_CUT)
148
+ Escpos.sequence(Escpos::PAPER_FULL_CUT)
129
149
  end
130
150
 
131
151
  end
@@ -7,7 +7,7 @@ module Escpos
7
7
  def initialize
8
8
  # ensure only supported sequences are generated
9
9
  @data = "".force_encoding("ASCII-8BIT")
10
- @data = Escpos.sequence HW_INIT
10
+ @data << Escpos.sequence(HW_INIT)
11
11
  end
12
12
 
13
13
  def write(data)
@@ -1,3 +1,3 @@
1
1
  module Escpos
2
- VERSION = "0.0.3"
2
+ VERSION = "0.0.4"
3
3
  end
data/lib/escpos.rb CHANGED
@@ -20,11 +20,57 @@ module Escpos
20
20
  # Paper
21
21
  PAPER_FULL_CUT = [ 0x1d, 0x56, 0x00 ] # Full paper cut
22
22
  PAPER_PARTIAL_CUT = [ 0x1d, 0x56, 0x01 ] # Partial paper cut
23
+ PAPER_CUT_A = [ 0x1d, 0x56, 0x41 ] # Paper cut A
24
+ PAPER_CUT_B = [ 0x1d, 0x56, 0x42 ] # Paper cut B
23
25
 
24
26
  # Cash Drawer
25
27
  CD_KICK_2 = [ 0x1b, 0x70, 0x00 ] # Send pulse to pin 2
26
28
  CD_KICK_5 = [ 0x1b, 0x70, 0x01 ] # Send pulse to pin 5
27
29
 
30
+ # Code Pages
31
+ CP_SET = [ 0x1b, 0x74 ] # Set Code Page
32
+ CP_CP437 = [ 0x0 ]
33
+ CP_CP850 = [ 0x2 ]
34
+ CP_CP860 = [ 0x3 ]
35
+ CP_CP863 = [ 0x4 ]
36
+ CP_CP865 = [ 0x5 ]
37
+ CP_CP1251 = [ 0x6 ]
38
+ CP_CP866 = [ 0x7 ]
39
+ CP_MACCYRILLIC = [ 0x8 ]
40
+ CP_CP775 = [ 0x9 ]
41
+ CP_CP1253 = [ 0x10 ]
42
+ CP_CP737 = [ 0x11 ]
43
+ CP_CP857 = [ 0x12 ]
44
+ CP_ISO8859_9 = [ 0x13 ]
45
+ CP_CP864 = [ 0x14 ]
46
+ CP_CP862 = [ 0x15 ]
47
+ CP_ISO8859_2 = [ 0x16 ]
48
+ CP_CP1253_ALT = [ 0x17 ]
49
+ CP_CP1250 = [ 0x18 ]
50
+ CP_CP858 = [ 0x19 ]
51
+ CP_CP1254 = [ 0x20 ]
52
+ CP_CP737_ALT = [ 0x24 ]
53
+ CP_CP1257 = [ 0x25 ]
54
+ CP_CP847 = [ 0x26 ]
55
+ CP_CP885 = [ 0x28 ]
56
+ CP_CP857_ALT = [ 0x29 ]
57
+ CP_CP1250_ALT = [ 0x30 ]
58
+ CP_CP775_ALT = [ 0x31 ]
59
+ CP_CP1254_ALT = [ 0x32 ]
60
+ CP_CP1256 = [ 0x34 ]
61
+ CP_CP1258 = [ 0x35 ]
62
+ CP_ISO8859_2_ALT = [ 0x36 ]
63
+ CP_ISO8859_3 = [ 0x37 ]
64
+ CP_ISO8859_4 = [ 0x38 ]
65
+ CP_ISO8859_5 = [ 0x39 ]
66
+ CP_ISO8859_6 = [ 0x40 ]
67
+ CP_ISO8859_7 = [ 0x41 ]
68
+ CP_ISO8859_8 = [ 0x42 ]
69
+ CP_ISO8859_9_ALT = [ 0x43 ]
70
+ CP_ISO8859_15 = [ 0x44 ]
71
+ CP_CP856 = [ 0x47 ]
72
+ CP_CP874 = [ 0x47 ]
73
+
28
74
  # Text formating
29
75
  TXT_NORMAL = [ 0x1b, 0x21, 0x00 ] # Normal text
30
76
  TXT_2HEIGHT = [ 0x1b, 0x21, 0x10 ] # Double height text
@@ -40,6 +86,8 @@ module Escpos
40
86
  TXT_ALIGN_LT = [ 0x1b, 0x61, 0x00 ] # Left justification
41
87
  TXT_ALIGN_CT = [ 0x1b, 0x61, 0x01 ] # Centering
42
88
  TXT_ALIGN_RT = [ 0x1b, 0x61, 0x02 ] # Right justification
89
+ TXT_INVERT_ON = [ 0x1d, 0x42, 0x01 ] # Inverted coloer text
90
+ TXT_INVERT_OFF = [ 0x1d, 0x42, 0x00 ] # Inverted coloer text
43
91
 
44
92
  # Barcodes
45
93
  BARCODE_TXT_OFF = [ 0x1d, 0x48, 0x00 ] # HRI barcode chars OFF
@@ -1,6 +1,8 @@
1
1
  Unformatted text
2
2
 
3
- <%= encode "ISO-8859-2 encoded text. (ěščřžýáíéúů)", encoding: "ISO-8859-2" %>
3
+ <%= set_printer_encoding(Escpos::CP_ISO8859_2) %>
4
+
5
+ <%= encode "UTF-8 to ISO-8859-2 text: (ěščřžýáíéúů)", encoding: "ISO-8859-2" %>
4
6
 
5
7
  <%= text "Normal text" %>
6
8
 
@@ -22,6 +24,10 @@ Unformatted text
22
24
 
23
25
  <%= center "Centered text" %>
24
26
 
27
+ <%= left %>
28
+
29
+ <%= invert "Inverted color text" %>
30
+
25
31
  <%= barcode "8594404000572" %>
26
32
 
27
33
 
@@ -11,7 +11,7 @@ class TestPrinter < Minitest::Test
11
11
  @printer.write template.result(Class.new { include Escpos::Helpers }.new.instance_eval { binding })
12
12
  @printer.cut!
13
13
  #pp @printer.to_base64
14
- assert_equal @printer.to_base64, 'G0BVbmZvcm1hdHRlZCB0ZXh0CgpJU08tODg1OS0yIGVuY29kZWQgdGV4dC4gKOy56Pi+/eHt6fr5KQoKGyEATm9ybWFsIHRleHQbIQAKChshEERvdWJsZSBoZWlnaHQgdGV4dBshAAoKGyEgRG91YmxlIHdpZHRoIHRleHQbIQAKChshMFF1YWQgYXJlYSB0ZXh0GyEACgobLQFVbmRlcmxpbmVkIHRleHQbLQAKChstAlVuZGVybGluZWQgdGV4dCAoMikbLQAKChtFAUJvbGQgdGV4dBtFAAoKG2EATGVmdCBhbGlnbmVkIHRleHQbYQAKChthAlJpZ2h0IGFsaWduZWQgdGV4dBthAAoKG2EBQ2VudGVyZWQgdGV4dBthAAoKHUgAHXcDHWgyHWsCODU5NDQwNDAwMDU3MgoKCgoKHVYA'
14
+ assert_equal @printer.to_base64, 'G0BVbmZvcm1hdHRlZCB0ZXh0CgobdBYKClVURi04IHRvIElTTy04ODU5LTIgdGV4dDogKOy56Pi+/eHt6fr5KQoKGyEATm9ybWFsIHRleHQbIQAKChshEERvdWJsZSBoZWlnaHQgdGV4dBshAAoKGyEgRG91YmxlIHdpZHRoIHRleHQbIQAKChshMFF1YWQgYXJlYSB0ZXh0GyEACgobLQFVbmRlcmxpbmVkIHRleHQbLQAKChstAlVuZGVybGluZWQgdGV4dCAoMikbLQAKChtFAUJvbGQgdGV4dBtFAAoKG2EATGVmdCBhbGlnbmVkIHRleHQbYQAKChthAlJpZ2h0IGFsaWduZWQgdGV4dBthAAoKG2EBQ2VudGVyZWQgdGV4dBthAAoKG2EAG2EACgodQgFJbnZlcnRlZCBjb2xvciB0ZXh0HUIACgodSAAddwMdaDIdawI4NTk0NDA0MDAwNTcyCgoKCgodVgA='
15
15
  end
16
16
 
17
17
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: escpos
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Svoboda
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-06-10 00:00:00.000000000 Z
11
+ date: 2016-08-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -69,6 +69,9 @@ files:
69
69
  - bin/setup
70
70
  - config
71
71
  - escpos.gemspec
72
+ - examples/IMG_20160608_001339_HDR.jpg
73
+ - examples/IMG_20160610_161302_HDR.jpg
74
+ - examples/IMG_20160610_204358_HDR.jpg
72
75
  - examples/report.erb
73
76
  - examples/report.rb
74
77
  - lib/escpos.rb
@@ -101,7 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
101
104
  version: '0'
102
105
  requirements: []
103
106
  rubyforge_project:
104
- rubygems_version: 2.5.1
107
+ rubygems_version: 2.6.4
105
108
  signing_key:
106
109
  specification_version: 4
107
110
  summary: A ruby implementation of ESC/POS (thermal) printer command specification.