barby 0.3.2 → 0.4.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.
- data/lib/barby/barcode/data_matrix.rb +46 -0
- data/lib/barby/outputter.rb +10 -2
- data/lib/barby/outputter/prawn_outputter.rb +77 -55
- data/lib/barby/version.rb +2 -2
- metadata +52 -39
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'semacode'
|
2
|
+
require 'barby/barcode'
|
3
|
+
|
4
|
+
module Barby
|
5
|
+
|
6
|
+
|
7
|
+
#Uses the semacode library (gem install semacode) to encode DataMatrix barcodes
|
8
|
+
class DataMatrix < Barcode2D
|
9
|
+
|
10
|
+
attr_accessor :data
|
11
|
+
|
12
|
+
|
13
|
+
def initialize(data)
|
14
|
+
self.data = data
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
def data=(data)
|
19
|
+
@data = data
|
20
|
+
@encoder = nil
|
21
|
+
end
|
22
|
+
|
23
|
+
def encoder
|
24
|
+
@encoder ||= ::DataMatrix::Encoder.new(data)
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
def encoding
|
29
|
+
encoder.data.map{|a| a.map{|b| b ? '1' : '0' }.join }
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def semacode?
|
34
|
+
#TODO: Not sure if this is right
|
35
|
+
data =~ /^http:\/\//
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def to_s
|
40
|
+
data
|
41
|
+
end
|
42
|
+
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
data/lib/barby/outputter.rb
CHANGED
@@ -60,13 +60,18 @@ module Barby
|
|
60
60
|
|
61
61
|
private
|
62
62
|
|
63
|
+
def two_dimensional?
|
64
|
+
barcode.respond_to?(:two_dimensional?) && barcode.two_dimensional?
|
65
|
+
end
|
66
|
+
|
67
|
+
|
63
68
|
#Converts the barcode's encoding (a string containing 1s and 0s)
|
64
69
|
#to true and false values (1 == true == "black bar")
|
65
70
|
#
|
66
71
|
#If the barcode is 2D, each line will be converted to an array
|
67
72
|
#in the same way
|
68
73
|
def booleans(reload=false)#:doc:
|
69
|
-
if
|
74
|
+
if two_dimensional?
|
70
75
|
encoding(reload).map{|l| l.split(//).map{|c| c == '1' } }
|
71
76
|
else
|
72
77
|
encoding(reload).split(//).map{|c| c == '1' }
|
@@ -88,7 +93,7 @@ module Barby
|
|
88
93
|
#
|
89
94
|
#For example, "1100111000" becomes [[true,2],[false,2],[true,3],[false,3]]
|
90
95
|
def boolean_groups(reload=false)
|
91
|
-
if
|
96
|
+
if two_dimensional?
|
92
97
|
encoding(reload).map do |line|
|
93
98
|
line.scan(/1+|0+/).map do |group|
|
94
99
|
[group[0,1] == '1', group.size]
|
@@ -102,6 +107,9 @@ module Barby
|
|
102
107
|
end
|
103
108
|
|
104
109
|
|
110
|
+
#Takes a hash and temporarily sets properties on self (the outputter object)
|
111
|
+
#corresponding with the keys to their values. When the block exits, the
|
112
|
+
#properties are reset to their original values. Returns whatever the block returns.
|
105
113
|
def with_options(options={})
|
106
114
|
original_options = options.inject({}) do |origs,pair|
|
107
115
|
if respond_to?(pair.first) && respond_to?("#{pair.first}=")
|
@@ -7,90 +7,112 @@ module Barby
|
|
7
7
|
|
8
8
|
register :to_pdf, :annotate_pdf
|
9
9
|
|
10
|
+
attr_accessor :xdim, :ydim, :x, :y, :height, :margin, :unbleed
|
11
|
+
|
10
12
|
|
11
13
|
def to_pdf(opts={})
|
12
|
-
|
13
|
-
|
14
|
+
doc_opts = opts.delete(:document) || {}
|
15
|
+
doc_opts[:page_size] ||= 'A4'
|
16
|
+
annotate_pdf(Prawn::Document.new(doc_opts), opts).render
|
14
17
|
end
|
15
18
|
|
16
19
|
|
17
20
|
def annotate_pdf(pdf, opts={})
|
18
|
-
opts
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
with_options opts do
|
22
|
+
xpos, ypos = x, y
|
23
|
+
orig_xpos = xpos
|
24
|
+
|
25
|
+
if barcode.two_dimensional?
|
26
|
+
boolean_groups.reverse_each do |groups|
|
27
|
+
groups.each do |bar,amount|
|
28
|
+
if bar
|
29
|
+
pdf.move_to(xpos+unbleed, ypos+unbleed)
|
30
|
+
pdf.line_to(xpos+unbleed, ypos+ydim-unbleed)
|
31
|
+
pdf.line_to(xpos+(xdim*amount)-unbleed, ypos+ydim-unbleed)
|
32
|
+
pdf.line_to(xpos+(xdim*amount)-unbleed, ypos+unbleed)
|
33
|
+
pdf.line_to(xpos+unbleed, ypos+unbleed)
|
34
|
+
pdf.fill
|
35
|
+
end
|
36
|
+
xpos += (xdim*amount)
|
37
|
+
end
|
38
|
+
xpos = orig_xpos
|
39
|
+
ypos += ydim
|
40
|
+
end
|
41
|
+
else
|
42
|
+
boolean_groups.each do |bar,amount|
|
26
43
|
if bar
|
27
|
-
pdf.move_to(xpos, ypos)
|
28
|
-
pdf.line_to(xpos, ypos+
|
29
|
-
pdf.line_to(xpos+(xdim*amount), ypos+
|
30
|
-
pdf.line_to(xpos+(xdim*amount), ypos)
|
31
|
-
pdf.line_to(xpos, ypos)
|
44
|
+
pdf.move_to(xpos+unbleed, ypos)
|
45
|
+
pdf.line_to(xpos+unbleed, ypos+height)
|
46
|
+
pdf.line_to(xpos+(xdim*amount)-unbleed, ypos+height)
|
47
|
+
pdf.line_to(xpos+(xdim*amount)-unbleed, ypos)
|
48
|
+
pdf.line_to(xpos+unbleed, ypos)
|
32
49
|
pdf.fill
|
33
50
|
end
|
34
51
|
xpos += (xdim*amount)
|
35
52
|
end
|
36
|
-
xpos = orig_xpos
|
37
|
-
ypos += ydim
|
38
|
-
end
|
39
|
-
else
|
40
|
-
boolean_groups.each do |bar,amount|
|
41
|
-
if bar
|
42
|
-
pdf.move_to(xpos, ypos)
|
43
|
-
pdf.line_to(xpos, ypos+height)
|
44
|
-
pdf.line_to(xpos+(xdim*amount), ypos+height)
|
45
|
-
pdf.line_to(xpos+(xdim*amount), ypos)
|
46
|
-
pdf.line_to(xpos, ypos)
|
47
|
-
pdf.fill
|
48
|
-
end
|
49
|
-
xpos += (xdim*amount)
|
50
53
|
end
|
54
|
+
|
51
55
|
end
|
52
56
|
|
53
57
|
pdf
|
54
58
|
end
|
55
59
|
|
56
60
|
|
57
|
-
|
61
|
+
def length
|
62
|
+
two_dimensional? ? encoding.first.length : encoding.length
|
63
|
+
end
|
58
64
|
|
59
|
-
def
|
60
|
-
|
61
|
-
:margin => 5,
|
62
|
-
:height => 100,
|
63
|
-
:xdim => 1
|
64
|
-
}
|
65
|
+
def width
|
66
|
+
length * xdim
|
65
67
|
end
|
66
68
|
|
67
|
-
def
|
68
|
-
|
69
|
-
opts = default_options.merge(opts)
|
70
|
-
opts[:x] ||= opts[:margin]
|
71
|
-
opts[:y] ||= opts[:margin]
|
72
|
-
opts[:document] = document_options(opts, doc_opts)
|
73
|
-
opts
|
69
|
+
def height
|
70
|
+
two_dimensional? ? (ydim * encoding.length) : (@height || 50)
|
74
71
|
end
|
75
72
|
|
76
|
-
def
|
77
|
-
|
78
|
-
#o[:page_size] ||= page_size(opts[:xdim], opts[:height], opts[:margin])
|
79
|
-
#%w(left right top bottom).each{|s| o[:"#{s}_margin"] ||= opts[:margin] }
|
80
|
-
o[:page_size] ||= 'A4' #Prawn doesn't currently support custom page sizes
|
81
|
-
o
|
73
|
+
def full_width
|
74
|
+
width + (margin * 2)
|
82
75
|
end
|
83
76
|
|
84
|
-
def
|
85
|
-
|
77
|
+
def full_height
|
78
|
+
height + (margin * 2)
|
86
79
|
end
|
87
80
|
|
88
|
-
|
89
|
-
|
81
|
+
#Margin is used for x and y if not given explicitly, effectively placing the barcode
|
82
|
+
#<margin> points from the [left,bottom] of the page.
|
83
|
+
#If you define x and y, there will be no margin. And if you don't define margin, it's 0.
|
84
|
+
def margin
|
85
|
+
@margin || 0
|
90
86
|
end
|
91
87
|
|
92
|
-
def
|
93
|
-
|
88
|
+
def x
|
89
|
+
@x || margin
|
90
|
+
end
|
91
|
+
|
92
|
+
def y
|
93
|
+
@y || margin
|
94
|
+
end
|
95
|
+
|
96
|
+
def xdim
|
97
|
+
@xdim || 1
|
98
|
+
end
|
99
|
+
|
100
|
+
def ydim
|
101
|
+
@ydim || xdim
|
102
|
+
end
|
103
|
+
|
104
|
+
#Defines an amount to reduce black bars/squares by to account for "ink bleed"
|
105
|
+
#If xdim = 3, unbleed = 0.2, a single/width black bar will be 2.6 wide
|
106
|
+
#For 2D, both x and y dimensions are reduced.
|
107
|
+
def unbleed
|
108
|
+
@unbleed || 0
|
109
|
+
end
|
110
|
+
|
111
|
+
|
112
|
+
private
|
113
|
+
|
114
|
+
def page_size(xdim, height, margin)
|
115
|
+
[width(xdim,margin), height(height,margin)]
|
94
116
|
end
|
95
117
|
|
96
118
|
|
data/lib/barby/version.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,25 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: barby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 15
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 4
|
9
|
+
- 0
|
10
|
+
version: 0.4.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- Tore Darell
|
8
|
-
autorequire:
|
14
|
+
autorequire:
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2010-08-18 00:00:00 +02:00
|
13
19
|
default_executable:
|
14
20
|
dependencies: []
|
15
21
|
|
16
|
-
description:
|
22
|
+
description: Barby creates barcodes.
|
17
23
|
email: toredarell@gmail.com
|
18
24
|
executables: []
|
19
25
|
|
@@ -22,53 +28,54 @@ extensions: []
|
|
22
28
|
extra_rdoc_files:
|
23
29
|
- README
|
24
30
|
files:
|
25
|
-
- lib/barby/
|
31
|
+
- lib/barby/barcode/bookland.rb
|
32
|
+
- lib/barby/barcode/code_128.rb
|
33
|
+
- lib/barby/barcode/code_25.rb
|
34
|
+
- lib/barby/barcode/code_25_iata.rb
|
35
|
+
- lib/barby/barcode/code_25_interleaved.rb
|
36
|
+
- lib/barby/barcode/code_39.rb
|
37
|
+
- lib/barby/barcode/code_93.rb
|
38
|
+
- lib/barby/barcode/data_matrix.rb
|
39
|
+
- lib/barby/barcode/ean_13.rb
|
40
|
+
- lib/barby/barcode/ean_8.rb
|
41
|
+
- lib/barby/barcode/gs1_128.rb
|
42
|
+
- lib/barby/barcode/pdf_417.rb
|
43
|
+
- lib/barby/barcode/qr_code.rb
|
26
44
|
- lib/barby/barcode.rb
|
27
|
-
- lib/barby/version.rb
|
28
|
-
- lib/barby/outputter.rb
|
29
|
-
- lib/barby/outputter/pdfwriter_outputter.rb
|
30
|
-
- lib/barby/outputter/rmagick_outputter.rb
|
31
45
|
- lib/barby/outputter/ascii_outputter.rb
|
46
|
+
- lib/barby/outputter/cairo_outputter.rb
|
47
|
+
- lib/barby/outputter/pdfwriter_outputter.rb
|
32
48
|
- lib/barby/outputter/png_outputter.rb
|
33
49
|
- lib/barby/outputter/prawn_outputter.rb
|
34
|
-
- lib/barby/outputter/
|
50
|
+
- lib/barby/outputter/rmagick_outputter.rb
|
35
51
|
- lib/barby/outputter/svg_outputter.rb
|
36
|
-
- lib/barby/
|
37
|
-
- lib/barby/
|
38
|
-
- lib/barby/
|
39
|
-
- lib/barby/barcode/code_93.rb
|
40
|
-
- lib/barby/barcode/ean_8.rb
|
41
|
-
- lib/barby/barcode/qr_code.rb
|
42
|
-
- lib/barby/barcode/code_25_interleaved.rb
|
43
|
-
- lib/barby/barcode/code_39.rb
|
44
|
-
- lib/barby/barcode/bookland.rb
|
45
|
-
- lib/barby/barcode/code_128.rb
|
46
|
-
- lib/barby/barcode/code_25_iata.rb
|
47
|
-
- lib/barby/barcode/gs1_128.rb
|
52
|
+
- lib/barby/outputter.rb
|
53
|
+
- lib/barby/vendor.rb
|
54
|
+
- lib/barby/version.rb
|
48
55
|
- lib/barby.rb
|
49
56
|
- bin/barby
|
50
57
|
- vendor/Pdf417lib-java-0.91/lib/Pdf417lib.jar
|
51
58
|
- vendor/Pdf417lib-java-0.91/lib/Pdf417lib.java
|
52
|
-
- vendor/rqrcode/
|
53
|
-
- vendor/rqrcode/Rakefile
|
59
|
+
- vendor/rqrcode/CHANGELOG
|
54
60
|
- vendor/rqrcode/COPYING
|
55
|
-
- vendor/rqrcode/lib/rqrcode/
|
56
|
-
- vendor/rqrcode/lib/rqrcode/
|
61
|
+
- vendor/rqrcode/lib/rqrcode/core_ext/array/behavior.rb
|
62
|
+
- vendor/rqrcode/lib/rqrcode/core_ext/array.rb
|
63
|
+
- vendor/rqrcode/lib/rqrcode/core_ext/integer/bitwise.rb
|
64
|
+
- vendor/rqrcode/lib/rqrcode/core_ext/integer.rb
|
65
|
+
- vendor/rqrcode/lib/rqrcode/core_ext.rb
|
66
|
+
- vendor/rqrcode/lib/rqrcode/qrcode/qr_8bit_byte.rb
|
57
67
|
- vendor/rqrcode/lib/rqrcode/qrcode/qr_bit_buffer.rb
|
58
|
-
- vendor/rqrcode/lib/rqrcode/qrcode/qr_math.rb
|
59
68
|
- vendor/rqrcode/lib/rqrcode/qrcode/qr_code.rb
|
69
|
+
- vendor/rqrcode/lib/rqrcode/qrcode/qr_math.rb
|
60
70
|
- vendor/rqrcode/lib/rqrcode/qrcode/qr_polynomial.rb
|
71
|
+
- vendor/rqrcode/lib/rqrcode/qrcode/qr_rs_block.rb
|
61
72
|
- vendor/rqrcode/lib/rqrcode/qrcode/qr_util.rb
|
62
|
-
- vendor/rqrcode/lib/rqrcode/qrcode
|
63
|
-
- vendor/rqrcode/lib/rqrcode/core_ext.rb
|
64
|
-
- vendor/rqrcode/lib/rqrcode/core_ext/integer/bitwise.rb
|
65
|
-
- vendor/rqrcode/lib/rqrcode/core_ext/integer.rb
|
66
|
-
- vendor/rqrcode/lib/rqrcode/core_ext/array.rb
|
67
|
-
- vendor/rqrcode/lib/rqrcode/core_ext/array/behavior.rb
|
73
|
+
- vendor/rqrcode/lib/rqrcode/qrcode.rb
|
68
74
|
- vendor/rqrcode/lib/rqrcode.rb
|
69
|
-
- vendor/rqrcode/
|
75
|
+
- vendor/rqrcode/Rakefile
|
76
|
+
- vendor/rqrcode/README
|
70
77
|
- vendor/rqrcode/test/runtest.rb
|
71
|
-
- vendor/rqrcode/
|
78
|
+
- vendor/rqrcode/test/test_data.rb
|
72
79
|
- README
|
73
80
|
has_rdoc: true
|
74
81
|
homepage: http://toretore.github.com/barby
|
@@ -80,23 +87,29 @@ rdoc_options: []
|
|
80
87
|
require_paths:
|
81
88
|
- lib
|
82
89
|
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
none: false
|
83
91
|
requirements:
|
84
92
|
- - ">="
|
85
93
|
- !ruby/object:Gem::Version
|
94
|
+
hash: 3
|
95
|
+
segments:
|
96
|
+
- 0
|
86
97
|
version: "0"
|
87
|
-
version:
|
88
98
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
89
100
|
requirements:
|
90
101
|
- - ">="
|
91
102
|
- !ruby/object:Gem::Version
|
103
|
+
hash: 3
|
104
|
+
segments:
|
105
|
+
- 0
|
92
106
|
version: "0"
|
93
|
-
version:
|
94
107
|
requirements: []
|
95
108
|
|
96
109
|
rubyforge_project: barby
|
97
|
-
rubygems_version: 1.3.
|
110
|
+
rubygems_version: 1.3.7
|
98
111
|
signing_key:
|
99
112
|
specification_version: 3
|
100
|
-
summary:
|
113
|
+
summary: The Ruby barcode generator
|
101
114
|
test_files: []
|
102
115
|
|