strokes 0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,88 @@
1
+ require 'subexec'
2
+
3
+ module Strokes
4
+
5
+ VALID_SYMBOLS = [:qrcode, :code39, :code128, :ean8, :ean13, :isbn, :upca, :upce]
6
+
7
+ class Barcode
8
+
9
+ def initialize(symbol, content, options = '')
10
+ raise IllegalSymbolError, symbol.to_s unless VALID_SYMBOLS.include?(symbol.to_sym)
11
+ @symbol = symbol.to_sym
12
+ @content = content
13
+ @options = options
14
+ end
15
+
16
+ # filename should include the full path
17
+ # options:
18
+ # - width: width of the resulting png
19
+ def save(filename, options = {})
20
+ ps = send(@symbol)
21
+ gs_options = [
22
+ "-dBATCH", "-dNOPAUSE", "-q", "-dTextAlphaBits=4", "-dSAFER",
23
+ "-sOutputFile=#{filename}",
24
+ "-sDEVICE=pnggray"
25
+ ]
26
+ barcode_ps = "#{File.expand_path(File.dirname(__FILE__))}/barcode.ps"
27
+ sub = Subexec.run "gs #{gs_options.join(" ")} #{barcode_ps} -c '#{ps}'"
28
+ raise(GhostScriptError, sub.output) unless sub.exitstatus == 0
29
+ resize_method = (ps =~ /includetext/ ? "-scale" : "-sample")
30
+ im_options = [
31
+ "-trim",
32
+ "-bordercolor white",
33
+ "-border 10%",
34
+ options[:width] ? "#{resize_method} #{options[:width]}" : nil
35
+ ].compact
36
+ sub = Subexec.run "mogrify #{im_options.join(' ')} #{filename}"
37
+ raise(ImageMagickError, sub.output) unless sub.exitstatus == 0
38
+ File.open(filename, 'r')
39
+ end
40
+
41
+ private
42
+
43
+ def ps_commands(code_options, options = {})
44
+ <<-PS
45
+ <</Orientation 1>> setpagedevice
46
+ #{options[:translate] || '100 680'} translate
47
+ #{options[:rotate] || '-90'} rotate
48
+ #{options[:scale] || '6 6'} scale
49
+ 0 0 moveto (#{@content}) (#{code_options.join(' ')}) /#{@symbol} /uk.co.terryburton.bwipp findresource exec
50
+ showpage
51
+ PS
52
+ end
53
+
54
+ def qrcode
55
+ ps_commands([@options], :translate => '0 750', :scale => '8 8')
56
+ end
57
+
58
+ def upca
59
+ ps_commands(['includetext', @options])
60
+ end
61
+
62
+ def upce
63
+ ps_commands(['includetext', @options])
64
+ end
65
+
66
+ def isbn
67
+ ps_commands(['includetext', 'guardwhitespace', @options])
68
+ end
69
+
70
+ def ean8
71
+ ps_commands(['includetext', 'guardwhitespace', @options])
72
+ end
73
+
74
+ def ean13
75
+ ps_commands(['includetext', 'guardwhitespace', @options])
76
+ end
77
+
78
+ def code39
79
+ ps_commands(['includetext', @options], :scale => '5 5')
80
+ end
81
+
82
+ def code128
83
+ ps_commands(['includetext', @options], :scale => '4 4', :translate => '150 750')
84
+ end
85
+
86
+ end
87
+
88
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: strokes
3
+ version: !ruby/object:Gem::Version
4
+ version: '0.1'
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Lars Kuhnt
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-07 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: subexec
16
+ requirement: &70111127081160 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70111127081160
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70111127080700 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *70111127080700
36
+ description: Generates PNG images of barcodes (i.e. EAN13, QR-Code, ISBN)
37
+ email:
38
+ - lars.kuhnt@gmail.com
39
+ executables: []
40
+ extensions: []
41
+ extra_rdoc_files: []
42
+ files:
43
+ - lib/strokes/active_record.rb
44
+ - lib/strokes/barcode.ps
45
+ - lib/strokes/barcode.rb
46
+ - lib/strokes.rb
47
+ - LICENSE
48
+ - README.md
49
+ - CHANGELOG.md
50
+ - ROADMAP.md
51
+ homepage: http://github.com/larskuhnt/strokes
52
+ licenses: []
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: 1.3.6
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 1.8.10
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: Ruby wrapper for the awsome postscriptbarcode library
75
+ test_files: []