jasper-command-line 0.1.2
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/bin/jasper-command-line +5 -0
- data/lib/jasper-command-line/command_line.rb +86 -0
- data/lib/jasper-command-line/jasper.rb +96 -0
- data/lib/jasper-command-line/java/commons-beanutils-1.8.2.jar +0 -0
- data/lib/jasper-command-line/java/commons-collections-3.2.1.jar +0 -0
- data/lib/jasper-command-line/java/commons-digester-2.1.jar +0 -0
- data/lib/jasper-command-line/java/commons-logging-1.1.jar +0 -0
- data/lib/jasper-command-line/java/groovy-all-1.7.5.jar +0 -0
- data/lib/jasper-command-line/java/iText-2.1.7.jar +0 -0
- data/lib/jasper-command-line/java/jasperreports-4.7.1.jar +0 -0
- data/lib/jasper-command-line/java/jcommon-1.0.15.jar +0 -0
- data/lib/jasper-command-line/java/jfreechart-1.0.12.jar +0 -0
- data/lib/jasper-command-line/java/xalan.jar +0 -0
- data/lib/jasper-command-line/version.rb +3 -0
- data/lib/jasper-command-line.rb +30 -0
- metadata +109 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
module JasperCommandLine
|
2
|
+
class CommandLine
|
3
|
+
def initialize(*args)
|
4
|
+
begin
|
5
|
+
options = parse_arguments(args)
|
6
|
+
|
7
|
+
if options[:jasper_file]
|
8
|
+
puts JasperCommandLine::Jasper::render_pdf(options[:jasper_file], options[:data], options[:params], {})
|
9
|
+
end
|
10
|
+
rescue ArgumentError => e
|
11
|
+
puts "Error: #{e.message}"
|
12
|
+
rescue => e
|
13
|
+
puts "Error: #{e.message}"
|
14
|
+
puts e.backtrace
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def parse_arguments(arguments)
|
21
|
+
data = {
|
22
|
+
:params => {}
|
23
|
+
}
|
24
|
+
|
25
|
+
raise ArgumentError.new("No arguments supplied") unless arguments.any?
|
26
|
+
|
27
|
+
i = 0
|
28
|
+
|
29
|
+
while i < arguments.length
|
30
|
+
argument = arguments[i]
|
31
|
+
|
32
|
+
case get_option(argument)
|
33
|
+
when 'data'
|
34
|
+
i = get_option_data(arguments, i) do |argument_data|
|
35
|
+
raise ArgumentError.new("Data not found") if get_option(argument_data)
|
36
|
+
data[:data] = argument_data
|
37
|
+
end
|
38
|
+
|
39
|
+
when 'data-file'
|
40
|
+
i = get_option_data(arguments, i) do |argument_data|
|
41
|
+
raise ArgumentError.new("Data file not found: #{argument_data}") unless File.exists?(argument_data)
|
42
|
+
data[:data] = File.read argument_data
|
43
|
+
end
|
44
|
+
|
45
|
+
when 'param'
|
46
|
+
i = get_option_data(arguments, i) do |argument_data|
|
47
|
+
raise ArgumentError.new("Invalid param format: #{argument_data}") unless argument_data =~ /(.*?)=(.*)/
|
48
|
+
data[:params][$1] = $2
|
49
|
+
end
|
50
|
+
|
51
|
+
when 'jasper'
|
52
|
+
# Or a file
|
53
|
+
i = get_option_data(arguments, i) do |argument_data|
|
54
|
+
raise ArgumentError.new("File not found: #{argument_data}") unless File.exists?(argument_data)
|
55
|
+
data[:jasper_file] = argument_data
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
return data
|
62
|
+
end
|
63
|
+
|
64
|
+
def get_option(argument)
|
65
|
+
if argument.strip =~ /^--(.*?)$/
|
66
|
+
return $1
|
67
|
+
end
|
68
|
+
|
69
|
+
nil
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_option_data(arguments, index)
|
73
|
+
index += 1
|
74
|
+
data = ''
|
75
|
+
|
76
|
+
while index < arguments.length && !get_option(arguments[index])
|
77
|
+
data << arguments[index]
|
78
|
+
index += 1
|
79
|
+
end
|
80
|
+
|
81
|
+
yield data
|
82
|
+
|
83
|
+
return index
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
#
|
2
|
+
# Copyright (C) 2012 Marlus Saraiva, Rodrigo Maia
|
3
|
+
#
|
4
|
+
# Permission is hereby granted, free of charge, to any person obtaining
|
5
|
+
# a copy of this software and associated documentation files (the
|
6
|
+
# "Software"), to deal in the Software without restriction, including
|
7
|
+
# without limitation the rights to use, copy, modify, merge, publish,
|
8
|
+
# distribute, sublicense, and/or sell copies of the Software, and to
|
9
|
+
# permit persons to whom the Software is furnished to do so, subject to
|
10
|
+
# the following conditions:
|
11
|
+
#
|
12
|
+
# The above copyright notice and this permission notice shall be
|
13
|
+
# included in all copies or substantial portions of the Software.
|
14
|
+
#
|
15
|
+
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
16
|
+
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
17
|
+
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
18
|
+
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
19
|
+
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
20
|
+
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
21
|
+
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
22
|
+
|
23
|
+
|
24
|
+
module JasperCommandLine
|
25
|
+
classpath = '.'
|
26
|
+
Dir["#{File.dirname(__FILE__)}/java/*.jar"].each do |jar|
|
27
|
+
classpath << File::PATH_SEPARATOR + File.expand_path(jar)
|
28
|
+
end
|
29
|
+
|
30
|
+
Dir["lib/*.jar"].each do |jar|
|
31
|
+
classpath << File::PATH_SEPARATOR + File.expand_path(jar)
|
32
|
+
end
|
33
|
+
|
34
|
+
Rjb::load( classpath, ['-Djava.awt.headless=true','-Xms128M', '-Xmx256M'] )
|
35
|
+
|
36
|
+
JRException = Rjb::import 'net.sf.jasperreports.engine.JRException'
|
37
|
+
JasperCompileManager = Rjb::import 'net.sf.jasperreports.engine.JasperCompileManager'
|
38
|
+
JasperExportManager = Rjb::import 'net.sf.jasperreports.engine.JasperExportManager'
|
39
|
+
JasperFillManager = Rjb::import 'net.sf.jasperreports.engine.JasperFillManager'
|
40
|
+
JasperPrint = Rjb::import 'net.sf.jasperreports.engine.JasperPrint'
|
41
|
+
JRXmlUtils = Rjb::import 'net.sf.jasperreports.engine.util.JRXmlUtils'
|
42
|
+
# This is here to avoid the "already initialized constant QUERY_EXECUTER_FACTORY_PREFIX" warnings.
|
43
|
+
JRXPathQueryExecuterFactory = silence_warnings{Rjb::import 'net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory'}
|
44
|
+
InputSource = Rjb::import 'org.xml.sax.InputSource'
|
45
|
+
StringReader = Rjb::import 'java.io.StringReader'
|
46
|
+
HashMap = Rjb::import 'java.util.HashMap'
|
47
|
+
ByteArrayInputStream = Rjb::import 'java.io.ByteArrayInputStream'
|
48
|
+
JavaString = Rjb::import 'java.lang.String'
|
49
|
+
JFreeChart = Rjb::import 'org.jfree.chart.JFreeChart'
|
50
|
+
|
51
|
+
module Jasper
|
52
|
+
def self.render_pdf(jasper_file, datasource, parameters, options)
|
53
|
+
options ||= {}
|
54
|
+
parameters ||= {}
|
55
|
+
jrxml_file = jasper_file.sub(/\.jasper$/, ".jrxml")
|
56
|
+
|
57
|
+
begin
|
58
|
+
# Convert the ruby parameters' hash to a java HashMap.
|
59
|
+
# Pay attention that, for now, all parameters are converted to string!
|
60
|
+
jasper_params = HashMap.new
|
61
|
+
parameters.each do |k,v|
|
62
|
+
jasper_params.put(JavaString.new(k.to_s), JavaString.new(v.to_s))
|
63
|
+
end
|
64
|
+
|
65
|
+
# Compile it, if needed
|
66
|
+
if !File.exist?(jasper_file) || (File.exist?(jrxml_file) && File.mtime(jrxml_file) > File.mtime(jasper_file))
|
67
|
+
JasperCompileManager.compileReportToFile(jrxml_file, jasper_file)
|
68
|
+
end
|
69
|
+
|
70
|
+
datasource = datasource.to_xml(options).to_s unless datasource.is_a?(String)
|
71
|
+
|
72
|
+
# Fill the report
|
73
|
+
input_source = InputSource.new
|
74
|
+
input_source.setCharacterStream(StringReader.new(datasource))
|
75
|
+
data_document = silence_warnings do
|
76
|
+
# This is here to avoid the "already initialized constant DOCUMENT_POSITION_*" warnings.
|
77
|
+
JRXmlUtils._invoke('parse', 'Lorg.xml.sax.InputSource;', input_source)
|
78
|
+
end
|
79
|
+
|
80
|
+
jasper_params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, data_document)
|
81
|
+
jasper_print = JasperFillManager.fillReport(jasper_file, jasper_params)
|
82
|
+
|
83
|
+
# Export it!
|
84
|
+
JasperExportManager._invoke('exportReportToPdf', 'Lnet.sf.jasperreports.engine.JasperPrint;', jasper_print)
|
85
|
+
rescue Exception=>e
|
86
|
+
if e.respond_to? 'printStackTrace'
|
87
|
+
JasperCommandLine.logger.error e.message
|
88
|
+
e.printStackTrace
|
89
|
+
else
|
90
|
+
JasperCommandLine.logger.error e.message + "\n " + e.backtrace.join("\n ")
|
91
|
+
end
|
92
|
+
raise e
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,30 @@
|
|
1
|
+
$LOAD_PATH.unshift File.dirname(__FILE__)
|
2
|
+
|
3
|
+
require 'logger'
|
4
|
+
require 'stringio'
|
5
|
+
require 'shellwords'
|
6
|
+
require 'open3'
|
7
|
+
require 'awesome_print'
|
8
|
+
require 'fileutils'
|
9
|
+
require "rjb"
|
10
|
+
require 'active_support/core_ext'
|
11
|
+
|
12
|
+
require 'jasper-command-line/version'
|
13
|
+
require 'jasper-command-line/command_line'
|
14
|
+
require 'jasper-command-line/jasper'
|
15
|
+
|
16
|
+
module JasperCommandLine
|
17
|
+
def self.logger=(log)
|
18
|
+
@logger = log
|
19
|
+
end
|
20
|
+
|
21
|
+
# Get AppleTvConverter logger.
|
22
|
+
#
|
23
|
+
# @return [Logger]
|
24
|
+
def self.logger
|
25
|
+
return @logger if @logger
|
26
|
+
logger = Logger.new(STDOUT)
|
27
|
+
logger.level = Logger::INFO
|
28
|
+
@logger = logger
|
29
|
+
end
|
30
|
+
end
|
metadata
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jasper-command-line
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Pedro Rodrigues
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-11-28 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rjb
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.4.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.4.0
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ~>
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '2.7'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ~>
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '2.7'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ~>
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.9.2
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.9.2
|
62
|
+
description: Use jasper-rails from the command line.
|
63
|
+
email:
|
64
|
+
- pedro@bbde.org
|
65
|
+
executables:
|
66
|
+
- jasper-command-line
|
67
|
+
extensions: []
|
68
|
+
extra_rdoc_files: []
|
69
|
+
files:
|
70
|
+
- lib/jasper-command-line/command_line.rb
|
71
|
+
- lib/jasper-command-line/jasper.rb
|
72
|
+
- lib/jasper-command-line/java/commons-beanutils-1.8.2.jar
|
73
|
+
- lib/jasper-command-line/java/commons-collections-3.2.1.jar
|
74
|
+
- lib/jasper-command-line/java/commons-digester-2.1.jar
|
75
|
+
- lib/jasper-command-line/java/commons-logging-1.1.jar
|
76
|
+
- lib/jasper-command-line/java/groovy-all-1.7.5.jar
|
77
|
+
- lib/jasper-command-line/java/iText-2.1.7.jar
|
78
|
+
- lib/jasper-command-line/java/jasperreports-4.7.1.jar
|
79
|
+
- lib/jasper-command-line/java/jcommon-1.0.15.jar
|
80
|
+
- lib/jasper-command-line/java/jfreechart-1.0.12.jar
|
81
|
+
- lib/jasper-command-line/java/xalan.jar
|
82
|
+
- lib/jasper-command-line/version.rb
|
83
|
+
- lib/jasper-command-line.rb
|
84
|
+
- bin/jasper-command-line
|
85
|
+
homepage: http://github.com/gokuu/jasper-command-line
|
86
|
+
licenses: []
|
87
|
+
post_install_message:
|
88
|
+
rdoc_options: []
|
89
|
+
require_paths:
|
90
|
+
- lib
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
none: false
|
93
|
+
requirements:
|
94
|
+
- - ! '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
98
|
+
none: false
|
99
|
+
requirements:
|
100
|
+
- - ! '>='
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '0'
|
103
|
+
requirements: []
|
104
|
+
rubyforge_project:
|
105
|
+
rubygems_version: 1.8.24
|
106
|
+
signing_key:
|
107
|
+
specification_version: 3
|
108
|
+
summary: Use jasper-rails from the command line.
|
109
|
+
test_files: []
|