jasper-command-line 0.4.0 → 0.4.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.
- data/Gemfile +3 -6
- data/README.md +25 -15
- data/jasper-command-line.gemspec +8 -6
- data/lib/jasper-command-line.rb +2 -0
- data/lib/jasper-command-line/command_line.rb +111 -117
- data/lib/jasper-command-line/jasper.rb +13 -2
- data/lib/jasper-command-line/prawn-js.rb +78 -0
- data/lib/jasper-command-line/version.rb +1 -1
- metadata +21 -4
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -3,12 +3,18 @@ jasper-command-line
|
|
3
3
|
|
4
4
|
Print a jasper document via the command line
|
5
5
|
|
6
|
-
|
6
|
+
### Disclaimer:
|
7
|
+
This is almost completely based on the great work by [Fortes Informática](https://github.com/fortesinformatica), with the gem [jasper-rails](https://github.com/fortesinformatica/jasper-rails). I built this out of necessity for a project that wouldn't run [jasper-rails](https://github.com/fortesinformatica/jasper-rails) on top of Ubuntu + nginx + Passenger.
|
7
8
|
|
8
9
|
This gem embeds the .jar files provided by [jasper-rails](https://github.com/fortesinformatica/jasper-rails), so you don't need to include the gem ([jasper-rails](https://github.com/fortesinformatica/jasper-rails) requires the whole Ruby on Rails framework, which isn't necessary in this case).
|
9
10
|
|
10
11
|
It also embeds the .jar files needed to digitally sign the PDF, if necessary. The PDF files are signed using [PortableSigner](http://portablesigner.sourceforge.net) by [Peter Pfläging](peter.pflaeging@wien.gv.at). All credit for the digital signature code goes to him.
|
11
12
|
|
13
|
+
### Other acknowledgements:
|
14
|
+
|
15
|
+
* [Prawn](http://prawn.majesticseacreature.com), a "Fast, Nimble PDF Writer for Ruby"
|
16
|
+
* [Henrik Nyh](http://henrik.nyh.se/) for the auto-print addition to Prawn, [prawn-print](https://github.com/barsoom/prawn-print).
|
17
|
+
|
12
18
|
## Dependencies
|
13
19
|
|
14
20
|
* You need a Java Virtual Machine installed and set up in order to use this gem.
|
@@ -34,24 +40,28 @@ gem "jasper-command-line"
|
|
34
40
|
## Using jasper-command-line
|
35
41
|
|
36
42
|
```
|
37
|
-
jasper-command-line [options]
|
43
|
+
Usage: jasper-command-line [options]
|
38
44
|
|
39
45
|
Options:
|
40
|
-
--jasper
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
--
|
45
|
-
|
46
|
-
|
47
|
-
|
46
|
+
-j, --jasper file The .jasper file to load (if one doesn't exist, it is compiled from the .jrxml file with the same name and on the same location)
|
47
|
+
-d, --data-file file The .xml file to load the data from
|
48
|
+
-c, --copies number The number of copies to generate
|
49
|
+
-l, --locale locale The locale to use in the report (in the format xx-YY)
|
50
|
+
--param name=value Adds the parameter with name key with the value value (can be defined multiple times)
|
51
|
+
|
52
|
+
Printing options:
|
53
|
+
-p, --print Whether to generate a PDF file that automatically opens the print dialog when opened in Acrobat Reader
|
54
|
+
-P, --print-silent Whether to generate a PDF file that automatically prints to the default printer when opened in Acrobat Reader
|
48
55
|
|
49
56
|
Digital signature options:
|
50
|
-
--sign-key-file
|
51
|
-
|
52
|
-
--sign-password password
|
53
|
-
--sign-
|
54
|
-
|
57
|
+
--sign-key-file file The location of the PKCS12 file to digitally sign the PDF with
|
58
|
+
--sign-location location The location data for the signature
|
59
|
+
--sign-password password The password for the PKCS12 file
|
60
|
+
--sign-reason reason The reason for signing the PDF
|
61
|
+
|
62
|
+
Common options:
|
63
|
+
-h, --help Show this message
|
64
|
+
--version Show version
|
55
65
|
```
|
56
66
|
|
57
67
|
## LICENSE
|
data/jasper-command-line.gemspec
CHANGED
@@ -13,14 +13,16 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.summary = "Use jasper-rails from the command line."
|
14
14
|
s.description = "Use jasper-rails from the command line."
|
15
15
|
|
16
|
-
s.add_dependency
|
17
|
-
s.add_dependency
|
18
|
-
s.add_dependency
|
19
|
-
s.
|
20
|
-
|
16
|
+
s.add_dependency 'rjb', '1.4.3'
|
17
|
+
s.add_dependency 'builder', '>= 3.0.3'
|
18
|
+
s.add_dependency 'activesupport', '>= 3.2.0'
|
19
|
+
s.add_dependency 'prawn', '>= 0.12.0'
|
20
|
+
|
21
|
+
s.add_development_dependency "rspec", "~> 2.7"
|
22
|
+
s.add_development_dependency "rake", "~> 0.9.2"
|
21
23
|
|
22
24
|
s.files = `git ls-files`.split("\n")
|
23
25
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
24
26
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
25
27
|
s.require_paths = ["lib"]
|
26
|
-
end
|
28
|
+
end
|
data/lib/jasper-command-line.rb
CHANGED
@@ -4,141 +4,135 @@ module JasperCommandLine
|
|
4
4
|
begin
|
5
5
|
options = parse_arguments(args)
|
6
6
|
|
7
|
-
if
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
puts " compiled from the .jrxml file with the same name and"
|
16
|
-
puts " on the same location)"
|
17
|
-
puts "--data-file /path/to/file The .xml file to load the data from"
|
18
|
-
puts "--copies number The number of copies to generate"
|
19
|
-
puts "--locale locale The locale to use in the report (in the format xx-YY)"
|
20
|
-
puts "--param key=value Adds the parameter with name key with the value value"
|
21
|
-
puts " (can be defined multiple times)"
|
22
|
-
puts ""
|
23
|
-
puts "Digital signature options:"
|
24
|
-
puts "--sign-key-file /path/to/file The location of the PKCS12 file to"
|
25
|
-
puts " digitally sign the PDF with"
|
26
|
-
puts "--sign-password password The password for the PKCS12 file"
|
27
|
-
puts "--sign-location location The location of the signature"
|
28
|
-
puts "--sign-reason reason The reason for signing the PDF"
|
29
|
-
else
|
30
|
-
if options[:jasper_file]
|
31
|
-
jasper_file = options.delete :jasper_file
|
32
|
-
data = options.delete :data
|
33
|
-
params = options.delete :params
|
34
|
-
|
35
|
-
if options[:signature]
|
36
|
-
if options[:signature][:key_file] && !options[:signature][:password]
|
37
|
-
raise ArgumentError.new("Password not supplied for certificate")
|
38
|
-
end
|
7
|
+
if options[:jasper_file]
|
8
|
+
jasper_file = options.delete :jasper_file
|
9
|
+
data = options.delete :data
|
10
|
+
params = options.delete :params
|
11
|
+
|
12
|
+
if options[:signature]
|
13
|
+
if options[:signature][:key_file] && !options[:signature][:password]
|
14
|
+
raise ArgumentError.new("Password not supplied for certificate")
|
39
15
|
end
|
40
|
-
|
41
|
-
puts JasperCommandLine::Jasper::render_pdf(jasper_file, data, params, options)
|
42
16
|
end
|
17
|
+
|
18
|
+
puts JasperCommandLine::Jasper::render_pdf(jasper_file, data, params, options)
|
43
19
|
end
|
44
|
-
|
20
|
+
|
21
|
+
exit 0
|
22
|
+
rescue OptionParser::InvalidOption => e
|
45
23
|
puts "Error: #{e.message}"
|
24
|
+
exit 1
|
46
25
|
rescue => e
|
47
26
|
puts "Error: #{e.message}"
|
48
|
-
|
27
|
+
exit 2
|
49
28
|
end
|
50
29
|
end
|
51
30
|
|
52
31
|
private
|
53
32
|
|
54
33
|
def parse_arguments(arguments)
|
34
|
+
require 'optparse'
|
35
|
+
require 'optparse/time'
|
36
|
+
require 'ostruct'
|
37
|
+
|
55
38
|
data = {
|
56
39
|
:params => {}
|
57
40
|
}
|
58
41
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
argument = arguments[i]
|
65
|
-
|
66
|
-
case get_option(argument)
|
67
|
-
when 'data'
|
68
|
-
i = get_option_data(arguments, i) do |argument_data|
|
69
|
-
raise ArgumentError.new("Data not found") if get_option(argument_data)
|
70
|
-
data[:data] = argument_data
|
71
|
-
end
|
72
|
-
|
73
|
-
when 'data-file'
|
74
|
-
i = get_option_data(arguments, i) do |argument_data|
|
75
|
-
raise ArgumentError.new("Data file not found: #{argument_data}") unless File.exists?(argument_data)
|
76
|
-
data[:data] = File.read argument_data
|
77
|
-
end
|
78
|
-
|
79
|
-
when 'param'
|
80
|
-
i = get_option_data(arguments, i) do |argument_data|
|
81
|
-
raise ArgumentError.new("Invalid param format: #{argument_data}") unless argument_data =~ /(.*?)=(.*)/
|
82
|
-
data[:params][$1] = $2
|
83
|
-
end
|
84
|
-
|
85
|
-
when 'jasper'
|
86
|
-
i = get_option_data(arguments, i) do |argument_data|
|
87
|
-
raise ArgumentError.new("File not found: #{argument_data}") unless File.exists?(argument_data) || File.exists?(argument_data.gsub(/\.jasper$/, '.jrxml'))
|
88
|
-
data[:jasper_file] = argument_data
|
89
|
-
end
|
90
|
-
|
91
|
-
when 'copies'
|
92
|
-
i = get_option_data(arguments, i) do |argument_data|
|
93
|
-
raise ArgumentError.new("Invalid number of copies: #{argument_data}") unless argument_data =~ /^[1-9][0-9]*$/
|
94
|
-
data[:copies] = argument_data.to_i
|
95
|
-
|
96
|
-
raise ArgumentError.new("Ghostscript isn't available. Merging is not possible") if data[:copies] > 1 && !JasperCommandLine.ghostscript_available?
|
97
|
-
end
|
98
|
-
|
99
|
-
when 'locale'
|
100
|
-
i = get_option_data(arguments, i) do |argument_data|
|
101
|
-
raise ArgumentError.new("Invalid locale: #{argument_data}") unless argument_data =~ /^[a-z]{2}-[A-Za-z0-9]{2,3}$/
|
102
|
-
data[:locale] = {
|
103
|
-
:language => argument_data.strip.split('-').first,
|
104
|
-
:sub_language => argument_data.strip.split('-').last
|
105
|
-
}
|
106
|
-
end
|
107
|
-
|
108
|
-
when 'sign-key-file'
|
109
|
-
# Sign document with file
|
110
|
-
i = get_option_data(arguments, i) do |argument_data|
|
111
|
-
raise ArgumentError.new("Signature key file not found: #{argument_data}") unless File.exists?(argument_data)
|
112
|
-
data[:signature] ||= {}
|
113
|
-
data[:signature][:key_file] = argument_data
|
114
|
-
end
|
115
|
-
|
116
|
-
when 'sign-location'
|
117
|
-
# Location to set on the signature
|
118
|
-
i = get_option_data(arguments, i) do |argument_data|
|
119
|
-
data[:signature] ||= {}
|
120
|
-
data[:signature][:location] = argument_data
|
121
|
-
end
|
122
|
-
|
123
|
-
when 'sign-password'
|
124
|
-
# Password to open the signature key file
|
125
|
-
i = get_option_data(arguments, i) do |argument_data|
|
126
|
-
data[:signature] ||= {}
|
127
|
-
data[:signature][:password] = argument_data
|
128
|
-
end
|
129
|
-
|
130
|
-
when 'sign-reason'
|
131
|
-
# Reason to set on the signature
|
132
|
-
i = get_option_data(arguments, i) do |argument_data|
|
133
|
-
data[:signature] ||= {}
|
134
|
-
data[:signature][:reason] = argument_data
|
135
|
-
end
|
136
|
-
|
137
|
-
else
|
138
|
-
i += 1
|
139
|
-
end
|
42
|
+
# Default to the help message
|
43
|
+
arguments << '--help' if arguments.empty?
|
44
|
+
|
45
|
+
opts = OptionParser.new do |opts|
|
46
|
+
opts.banner = "Usage: jasper-command-line [options]"
|
140
47
|
end
|
141
48
|
|
49
|
+
opts.separator ""
|
50
|
+
opts.separator "Options:"
|
51
|
+
|
52
|
+
opts.on('-j', '--jasper file', "The .jasper file to load (if one doesn't exist, it is compiled from the .jrxml file with the same name and on the same location)") do |file|
|
53
|
+
raise ArgumentError.new("File not found: #{file}") unless File.exists?(file) || File.exists?(file.gsub(/\.jasper$/, '.jrxml'))
|
54
|
+
data[:jasper_file] = file
|
55
|
+
end
|
56
|
+
|
57
|
+
opts.on('-d', '--data-file file', "The .xml file to load the data from") do |file|
|
58
|
+
raise ArgumentError.new("Data file not found: #{file}") unless File.exists?(file)
|
59
|
+
data[:data] = File.read file
|
60
|
+
end
|
61
|
+
|
62
|
+
opts.on('-c', '--copies number', Integer, "The number of copies to generate") do |i|
|
63
|
+
data[:copies] = i
|
64
|
+
raise ArgumentError.new("Ghostscript isn't available. Merging is not possible") if data[:copies] > 1 && !JasperCommandLine.ghostscript_available?
|
65
|
+
end
|
66
|
+
|
67
|
+
opts.on('-l', '--locale locale', "The locale to use in the report (in the format xx-YY)") do |locale|
|
68
|
+
raise ArgumentError.new("Invalid locale format: #{locale}") unless locale =~ /([a-z]{2})-([A-Z]{2})/
|
69
|
+
data[:locale] = { language: $1, sub_language: $2 }
|
70
|
+
end
|
71
|
+
|
72
|
+
opts.on('--param name=value', "Adds the parameter with name key with the value value (can be defined multiple times)") do |parameter|
|
73
|
+
raise ArgumentError.new("Invalid param format: #{parameter}") unless parameter =~ /([^\s]+)=(.*)/
|
74
|
+
data[:params][$1] = $2
|
75
|
+
end
|
76
|
+
|
77
|
+
opts.separator ""
|
78
|
+
opts.separator "Printing options:"
|
79
|
+
|
80
|
+
opts.on('-p', '--print', "Whether to generate a PDF file that automatically opens the print dialog when opened in Acrobat Reader") do
|
81
|
+
raise ArgumentError.new("Can't supply both --print and --print-silent") if data[:print_silent]
|
82
|
+
data[:print] = true
|
83
|
+
end
|
84
|
+
|
85
|
+
opts.on('-P', '--print-silent', "Whether to generate a PDF file that automatically prints to the default printer when opened in Acrobat Reader") do
|
86
|
+
raise ArgumentError.new("Can't supply both --print and --print-silent") if data[:print]
|
87
|
+
data[:print_silent] = true
|
88
|
+
end
|
89
|
+
|
90
|
+
opts.separator ""
|
91
|
+
opts.separator "Digital signature options:"
|
92
|
+
|
93
|
+
opts.on('--sign-key-file file', "The location of the PKCS12 file to digitally sign the PDF with") do |file|
|
94
|
+
# Sign document with file
|
95
|
+
raise ArgumentError.new("Signature key file not found: #{file}") unless File.exists?(file)
|
96
|
+
data[:signature] ||= {}
|
97
|
+
data[:signature][:key_file] = file
|
98
|
+
end
|
99
|
+
|
100
|
+
opts.on('--sign-location location', "The location data for the signature") do |location|
|
101
|
+
# Location to set on the signature
|
102
|
+
data[:signature] ||= {}
|
103
|
+
data[:signature][:location] = location
|
104
|
+
end
|
105
|
+
|
106
|
+
opts.on('--sign-password password', "The password for the PKCS12 file") do |password|
|
107
|
+
# Password to open the signature key file
|
108
|
+
data[:signature] ||= {}
|
109
|
+
data[:signature][:password] = password
|
110
|
+
end
|
111
|
+
|
112
|
+
opts.on('--sign-reason reason', "The reason for signing the PDF") do |reason|
|
113
|
+
# Reason to set on the signature
|
114
|
+
data[:signature] ||= {}
|
115
|
+
data[:signature][:reason] = reason
|
116
|
+
end
|
117
|
+
|
118
|
+
opts.separator ""
|
119
|
+
opts.separator "Common options:"
|
120
|
+
|
121
|
+
# No argument, shows at tail. This will print an options summary.
|
122
|
+
# Try it and see!
|
123
|
+
opts.on_tail("-h", "--help", "Show this message") do
|
124
|
+
puts opts
|
125
|
+
exit
|
126
|
+
end
|
127
|
+
|
128
|
+
# Another typical switch to print the version.
|
129
|
+
opts.on_tail("--version", "Show version") do
|
130
|
+
puts JasperCommandLine::VERSION
|
131
|
+
exit
|
132
|
+
end
|
133
|
+
|
134
|
+
opts.parse! arguments
|
135
|
+
|
142
136
|
return data
|
143
137
|
end
|
144
138
|
|
@@ -20,8 +20,6 @@
|
|
20
20
|
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
21
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
23
|
-
|
24
|
-
|
25
23
|
module JasperCommandLine
|
26
24
|
module Jasper
|
27
25
|
def self.render_pdf(jasper_file, datasource, parameters, options)
|
@@ -95,6 +93,19 @@ module JasperCommandLine
|
|
95
93
|
file = copy_file
|
96
94
|
end
|
97
95
|
|
96
|
+
if options[:print] || options[:print_silent]
|
97
|
+
temp_file = Tempfile.new(['pdf-', '.pdf'])
|
98
|
+
file2 = temp_file.path
|
99
|
+
temp_file.close!
|
100
|
+
|
101
|
+
::Prawn::Document.generate(file2, template: file) do |pdf|
|
102
|
+
pdf.print if options[:print]
|
103
|
+
pdf.print_silent if options[:print_silent]
|
104
|
+
end
|
105
|
+
|
106
|
+
file = file2
|
107
|
+
end
|
108
|
+
|
98
109
|
# Digitally sign the file, if necessary
|
99
110
|
if sign_options
|
100
111
|
temp_signed_file = Tempfile.new(['signed-pdf-', '.pdf'])
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
#
|
3
|
+
# js.rb : Implements embeddable Javascript support for PDF
|
4
|
+
#
|
5
|
+
# Copyright March 2009, James Healy. All Rights Reserved.
|
6
|
+
#
|
7
|
+
# This is free software. Please see the LICENSE file for details.
|
8
|
+
|
9
|
+
module JasperCommandLine
|
10
|
+
module Prawn
|
11
|
+
module JS
|
12
|
+
# The maximum number of children to fit into a single node in the JavaScript tree.
|
13
|
+
NAME_TREE_CHILDREN_LIMIT = 20 #:nodoc:
|
14
|
+
|
15
|
+
# add a Javascript fragment that will execute when the document is opened.
|
16
|
+
#
|
17
|
+
# There can only be as many fragments as required. Calling this function
|
18
|
+
# multiple times will append the new fragment to the list.
|
19
|
+
#
|
20
|
+
def add_docopen_js(name, script)
|
21
|
+
obj = ref!(:S => :JavaScript, :JS => script)
|
22
|
+
javascript.data.add(name, obj)
|
23
|
+
end
|
24
|
+
|
25
|
+
def print
|
26
|
+
print_with_auto_to_printer false, nil
|
27
|
+
end
|
28
|
+
|
29
|
+
def print_silent
|
30
|
+
print_with_auto_to_printer true, nil
|
31
|
+
end
|
32
|
+
|
33
|
+
def print_with_auto_to_printer(auto, printer)
|
34
|
+
js = [
|
35
|
+
'var pp = this.getPrintParams();',
|
36
|
+
interactive_js(auto),
|
37
|
+
select_printer_js(printer),
|
38
|
+
'this.print(pp);'
|
39
|
+
]
|
40
|
+
|
41
|
+
add_docopen_js "print", js.join(' ')
|
42
|
+
end
|
43
|
+
|
44
|
+
def interactive_js(auto)
|
45
|
+
"pp.interactive = pp.constants.interactionLevel.silent;" if auto
|
46
|
+
end
|
47
|
+
|
48
|
+
def select_printer_js(printer)
|
49
|
+
if printer
|
50
|
+
escaped_printer = printer.gsub('"') { "\\#$0" }
|
51
|
+
|
52
|
+
[
|
53
|
+
'var names = app.printerNames;',
|
54
|
+
'var regex = new RegExp("#{escaped_printer}", "i");',
|
55
|
+
'for (var i = 0; i < names.length; i++) {',
|
56
|
+
'if (names[i].match(regex)) {',
|
57
|
+
'pp.printerName = names[i];',
|
58
|
+
'break;',
|
59
|
+
'}',
|
60
|
+
'}'
|
61
|
+
].join(' ')
|
62
|
+
else
|
63
|
+
'pp.printerName = "";'
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
# create or access the Javascript Name Tree in the document names dict.
|
68
|
+
# See section 3.6.3 and table 3.28 in the PDF spec.
|
69
|
+
#
|
70
|
+
def javascript
|
71
|
+
names.data[:JavaScript] ||= ref!(::Prawn::Core::NameTree::Node.new(self, NAME_TREE_CHILDREN_LIMIT))
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
require 'prawn/document'
|
78
|
+
::Prawn::Document.send(:include, JasperCommandLine::Prawn::JS)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jasper-command-line
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-04-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rjb
|
@@ -34,7 +34,7 @@ dependencies:
|
|
34
34
|
requirements:
|
35
35
|
- - ! '>='
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version: 3.0.
|
37
|
+
version: 3.0.3
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -42,7 +42,7 @@ dependencies:
|
|
42
42
|
requirements:
|
43
43
|
- - ! '>='
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version: 3.0.
|
45
|
+
version: 3.0.3
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: activesupport
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,6 +59,22 @@ dependencies:
|
|
59
59
|
- - ! '>='
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: 3.2.0
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: prawn
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: 0.12.0
|
70
|
+
type: :runtime
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: 0.12.0
|
62
78
|
- !ruby/object:Gem::Dependency
|
63
79
|
name: rspec
|
64
80
|
requirement: !ruby/object:Gem::Requirement
|
@@ -125,6 +141,7 @@ files:
|
|
125
141
|
- lib/jasper-command-line/java/jcommon-1.0.15.jar
|
126
142
|
- lib/jasper-command-line/java/jfreechart-1.0.12.jar
|
127
143
|
- lib/jasper-command-line/java/xalan.jar
|
144
|
+
- lib/jasper-command-line/prawn-js.rb
|
128
145
|
- lib/jasper-command-line/version.rb
|
129
146
|
homepage: http://github.com/gokuu/jasper-command-line
|
130
147
|
licenses: []
|