jasper-rails 0.1.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/.gitignore +5 -0
- data/Gemfile +8 -0
- data/Rakefile +1 -0
- data/jasper-rails.gemspec +23 -0
- data/lib/jasper-rails.rb +105 -0
- data/lib/jasper-rails/version.rb +4 -0
- data/lib/java/commons-beanutils-1.8.2.jar +0 -0
- data/lib/java/commons-collections-3.2.1.jar +0 -0
- data/lib/java/commons-digester-2.1.jar +0 -0
- data/lib/java/commons-logging-1.1.jar +0 -0
- data/lib/java/groovy-all-1.7.5.jar +0 -0
- data/lib/java/iText-2.1.7.jar +0 -0
- data/lib/java/jasperreports-4.5.1.jar +0 -0
- data/lib/java/jcommon-1.0.15.jar +0 -0
- data/lib/java/jfreechart-1.0.12.jar +0 -0
- data/lib/java/xalan.jar +0 -0
- metadata +105 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "jasper-rails/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "jasper-rails"
|
7
|
+
s.version = JasperRails::VERSION
|
8
|
+
s.authors = ["Marlus Saraiva", "Rodrigo Maia"]
|
9
|
+
s.summary = %q{Rails and JasperReports integration}
|
10
|
+
s.description = %q{Generate pdf reports on Rails using Jasper Reports reporting tool}
|
11
|
+
s.email = "rodrigomaia@grupofortes.com.br"
|
12
|
+
s.homepage = "https://github.com/fortesinformatica/jasper-rails"
|
13
|
+
|
14
|
+
s.files = `git ls-files`.split("\n")
|
15
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
16
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.add_dependency('rspec', '>= 2.8.0')
|
20
|
+
s.add_dependency('rspec-rails', '>= 2.8.0')
|
21
|
+
s.add_dependency('rjb', '>= 1.4.0')
|
22
|
+
s.add_dependency('pdf-inspector', '>= 1.0.1')
|
23
|
+
end
|
data/lib/jasper-rails.rb
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
require "jasper-rails/version"
|
2
|
+
require "rails"
|
3
|
+
require "rjb"
|
4
|
+
require "rspec"
|
5
|
+
require "pdf/inspector"
|
6
|
+
|
7
|
+
module JasperRails
|
8
|
+
|
9
|
+
classpath = '.'
|
10
|
+
Dir["#{File.dirname(__FILE__)}/java/*.jar"].each do |jar|
|
11
|
+
classpath << File::PATH_SEPARATOR + File.expand_path(jar)
|
12
|
+
end
|
13
|
+
|
14
|
+
Rjb::load( classpath, ['-Djava.awt.headless=true','-Xms128M', '-Xmx256M'] )
|
15
|
+
|
16
|
+
JRException = Rjb::import 'net.sf.jasperreports.engine.JRException'
|
17
|
+
JasperCompileManager = Rjb::import 'net.sf.jasperreports.engine.JasperCompileManager'
|
18
|
+
JasperExportManager = Rjb::import 'net.sf.jasperreports.engine.JasperExportManager'
|
19
|
+
JasperFillManager = Rjb::import 'net.sf.jasperreports.engine.JasperFillManager'
|
20
|
+
JasperPrint = Rjb::import 'net.sf.jasperreports.engine.JasperPrint'
|
21
|
+
JRXmlUtils = Rjb::import 'net.sf.jasperreports.engine.util.JRXmlUtils'
|
22
|
+
JRXPathQueryExecuterFactory = Rjb::import 'net.sf.jasperreports.engine.query.JRXPathQueryExecuterFactory'
|
23
|
+
InputSource = Rjb::import 'org.xml.sax.InputSource'
|
24
|
+
StringReader = Rjb::import 'java.io.StringReader'
|
25
|
+
HashMap = Rjb::import 'java.util.HashMap'
|
26
|
+
ByteArrayInputStream = Rjb::import 'java.io.ByteArrayInputStream'
|
27
|
+
JavaString = Rjb::import 'java.lang.String'
|
28
|
+
JFreeChart = Rjb::import 'org.jfree.chart.JFreeChart'
|
29
|
+
|
30
|
+
module Jasper
|
31
|
+
module Rails
|
32
|
+
def self.render_pdf(jasper_file, datasource, parameters, options)
|
33
|
+
options ||= {}
|
34
|
+
parameters ||= {}
|
35
|
+
jrxml_file = jasper_file.sub(/\.jasper$/, ".jrxml")
|
36
|
+
|
37
|
+
begin
|
38
|
+
# Convert the ruby parameters' hash to a java HashMap.
|
39
|
+
# Pay attention that, for now, all parameters are converted to string!
|
40
|
+
jasper_params = HashMap.new
|
41
|
+
parameters.each do |k,v|
|
42
|
+
jasper_params.put(JavaString.new(k.to_s), JavaString.new(v.to_s))
|
43
|
+
end
|
44
|
+
|
45
|
+
# Compile it, if needed
|
46
|
+
if !File.exist?(jasper_file) || (File.exist?(jrxml_file) && File.mtime(jrxml_file) > File.mtime(jasper_file))
|
47
|
+
JasperCompileManager.compileReportToFile(jrxml_file, jasper_file)
|
48
|
+
end
|
49
|
+
|
50
|
+
# Fill the report
|
51
|
+
input_source = InputSource.new
|
52
|
+
input_source.setCharacterStream(StringReader.new(datasource.to_xml(options).to_s))
|
53
|
+
data_document = silence_warnings do
|
54
|
+
# This is here to avoid the "already initialized constant DOCUMENT_POSITION_*" warnings.
|
55
|
+
# It's harmless. But pretty annoying.
|
56
|
+
JRXmlUtils._invoke('parse', 'Lorg.xml.sax.InputSource;', input_source)
|
57
|
+
end
|
58
|
+
|
59
|
+
jasper_params.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, data_document)
|
60
|
+
jasper_print = JasperFillManager.fillReport(jasper_file, jasper_params)
|
61
|
+
|
62
|
+
# Export it!
|
63
|
+
JasperExportManager._invoke('exportReportToPdf', 'Lnet.sf.jasperreports.engine.JasperPrint;', jasper_print)
|
64
|
+
rescue Exception=>e
|
65
|
+
if e.respond_to? 'printStackTrace'
|
66
|
+
puts e.message
|
67
|
+
e.printStackTrace
|
68
|
+
else
|
69
|
+
puts e.message
|
70
|
+
puts e.backtrace
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
class ActionController::Responder
|
78
|
+
def to_pdf
|
79
|
+
jasper_file = "app/views/#{controller.controller_path}/#{controller.action_name}.jasper"
|
80
|
+
|
81
|
+
params = {}
|
82
|
+
controller.instance_variables.each do |v|
|
83
|
+
params[v.to_s[1..-1]] = controller.instance_variable_get(v)
|
84
|
+
end
|
85
|
+
|
86
|
+
controller.send_data Jasper::Rails::render_pdf(jasper_file, resource, params, options), :type => Mime::PDF
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
end
|
91
|
+
|
92
|
+
RSpec::Matchers.define :contain do |string|
|
93
|
+
match do |response|
|
94
|
+
@pdf = PDF::Inspector::Text::analyze(response.body)
|
95
|
+
@pdf.strings.include? string
|
96
|
+
end
|
97
|
+
|
98
|
+
failure_message_for_should do |response|
|
99
|
+
"expected that the PDF text would contain #{expected}. It only contains: #{@pdf.strings.to_s}"
|
100
|
+
end
|
101
|
+
|
102
|
+
failure_message_for_should_not do |response|
|
103
|
+
"expected that the PDF text would not contain #{expected}. But it does: #{@pdf.strings.to_s}"
|
104
|
+
end
|
105
|
+
end
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/java/xalan.jar
ADDED
Binary file
|
metadata
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jasper-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Marlus Saraiva
|
9
|
+
- Rodrigo Maia
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2012-05-16 00:00:00.000000000Z
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rspec
|
17
|
+
requirement: &70277456604960 !ruby/object:Gem::Requirement
|
18
|
+
none: false
|
19
|
+
requirements:
|
20
|
+
- - ! '>='
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.8.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: *70277456604960
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rspec-rails
|
28
|
+
requirement: &70277456604480 !ruby/object:Gem::Requirement
|
29
|
+
none: false
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 2.8.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *70277456604480
|
37
|
+
- !ruby/object:Gem::Dependency
|
38
|
+
name: rjb
|
39
|
+
requirement: &70277456603940 !ruby/object:Gem::Requirement
|
40
|
+
none: false
|
41
|
+
requirements:
|
42
|
+
- - ! '>='
|
43
|
+
- !ruby/object:Gem::Version
|
44
|
+
version: 1.4.0
|
45
|
+
type: :runtime
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *70277456603940
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: pdf-inspector
|
50
|
+
requirement: &70277456603480 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: 1.0.1
|
56
|
+
type: :runtime
|
57
|
+
prerelease: false
|
58
|
+
version_requirements: *70277456603480
|
59
|
+
description: Generate pdf reports on Rails using Jasper Reports reporting tool
|
60
|
+
email: rodrigomaia@grupofortes.com.br
|
61
|
+
executables: []
|
62
|
+
extensions: []
|
63
|
+
extra_rdoc_files: []
|
64
|
+
files:
|
65
|
+
- .gitignore
|
66
|
+
- Gemfile
|
67
|
+
- Rakefile
|
68
|
+
- jasper-rails.gemspec
|
69
|
+
- lib/jasper-rails.rb
|
70
|
+
- lib/jasper-rails/version.rb
|
71
|
+
- lib/java/commons-beanutils-1.8.2.jar
|
72
|
+
- lib/java/commons-collections-3.2.1.jar
|
73
|
+
- lib/java/commons-digester-2.1.jar
|
74
|
+
- lib/java/commons-logging-1.1.jar
|
75
|
+
- lib/java/groovy-all-1.7.5.jar
|
76
|
+
- lib/java/iText-2.1.7.jar
|
77
|
+
- lib/java/jasperreports-4.5.1.jar
|
78
|
+
- lib/java/jcommon-1.0.15.jar
|
79
|
+
- lib/java/jfreechart-1.0.12.jar
|
80
|
+
- lib/java/xalan.jar
|
81
|
+
homepage: https://github.com/fortesinformatica/jasper-rails
|
82
|
+
licenses: []
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
none: false
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: '0'
|
93
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
|
+
none: false
|
95
|
+
requirements:
|
96
|
+
- - ! '>='
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubyforge_project:
|
101
|
+
rubygems_version: 1.8.17
|
102
|
+
signing_key:
|
103
|
+
specification_version: 3
|
104
|
+
summary: Rails and JasperReports integration
|
105
|
+
test_files: []
|