├── libs
└── README.md
├── jrxml
├── README.md
└── test.jrxml
├── .gitattributes
├── settings.json
├── package.json
├── LICENSE
├── .gitignore
├── README.md
└── index.js
/libs/README.md:
--------------------------------------------------------------------------------
1 | Put the jar files here.
--------------------------------------------------------------------------------
/jrxml/README.md:
--------------------------------------------------------------------------------
1 | Put the Jasper Reports JRXML files here.
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
--------------------------------------------------------------------------------
/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "reports":{
3 | "test1": {
4 | "jrxml": "/jrxml/test.jrxml"
5 | },
6 | "test2": {
7 | "jrxml": "/jrxml/test2.jrxml",
8 | "subreports":{
9 | "parametername1": {
10 | "jrxml": "/jrxml/test2subreport1.jrxml"
11 | }
12 | }
13 | }
14 | },
15 | "drivers": {
16 | "postgresql": {
17 | "path": "/libs/postgresql-42.2.1.jar",
18 | "class": "org.postgresql.Driver"
19 | }
20 | },
21 | "connections": {
22 | "mytestdatabase": {
23 | "jdbc": "jdbc:postgresql://localhost:5432/mytestdatabase",
24 | "user": "myusername",
25 | "password": "mypassword"
26 | }
27 | }
28 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "node-jasper-server",
3 | "version": "1.0.2",
4 | "description": "Jasper Reports Server in NodeJS",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [
10 | "Jasper",
11 | "Reports",
12 | "Node"
13 | ],
14 | "author": "Andrew M. Loable - Loable Technologies",
15 | "email": "andrew@loable.tech",
16 | "url": "https://loable.tech",
17 | "license": "MIT",
18 | "dependencies": {
19 | "async": "^2.6.0",
20 | "body-parser": "^1.18.2",
21 | "cors": "^2.8.4",
22 | "express": "^4.16.3",
23 | "extend": "^3.0.1",
24 | "fs": "0.0.1-security",
25 | "java": "^0.9.0",
26 | "path": "^0.12.7",
27 | "sleep": "^5.1.1",
28 | "tmp": "0.0.33",
29 | "util": "^0.10.3"
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018 Andrew Loable
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (http://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # Typescript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 |
--------------------------------------------------------------------------------
/jrxml/test.jrxml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # jasper-node-server
2 | Host Jasper Reports in NodeJS
3 |
4 |
5 | ## Download
6 |
7 | ```
8 | git clone git:github.com/andrewloable/jasper-node-server.git
9 | npm install
10 | ```
11 |
12 | ## Libraries
13 |
14 | Put all Jasper Reports libraries (jar files) under the /libs folder.
15 | The easiest way to get the libraries is to copy all jar files from JasperReports Server under
16 |
17 | ```
18 | /apache-tomcat/webapps/jasperserver/WEB-INF/lib
19 | ```
20 |
21 | ## Configure
22 |
23 | All reports, drivers and connections are set in settings.json.
24 | A sample configuration is shown below.
25 |
26 | ```
27 | {
28 | "reports":{
29 | "test1": {
30 | "jrxml": "/jrxml/test.jrxml"
31 | },
32 | "test2": {
33 | "jrxml": "/jrxml/test2.jrxml",
34 | "subreports":{
35 | "parametername1": {
36 | "jrxml": "/jrxml/test2subreport1.jrxml"
37 | }
38 | }
39 | }
40 | },
41 | "drivers": {
42 | "postgresql": {
43 | "path": "/libs/postgresql-42.2.1.jar",
44 | "class": "org.postgresql.Driver"
45 | }
46 | },
47 | "connections": {
48 | "mytestdatabase": {
49 | "jdbc": "jdbc:postgresql://localhost:5432/mytestdatabase",
50 | "user": "myusername",
51 | "password": "mypassword"
52 | }
53 | }
54 | }
55 | ```
56 |
57 | ## Run
58 |
59 | Execute the command below.
60 |
61 | ```
62 | node index.js
63 | ```
64 |
65 | This will run an express app that listens to port 3000 and will accept connections from localhost only.
66 |
67 | ## API
68 |
69 | * **/generate_pdf**
70 | Generate a PDF report.
71 |
72 | * **/generate_html**
73 | Generate an HTML report.
74 |
75 | * **/generate_rtf**
76 | Generate an RTF report.
77 |
78 | * **/generate_csv**
79 | Generate a CSV report.
80 |
81 | * **/generate_docx**
82 | Generate a Docx report.
83 |
84 | * **/generate_pptx**
85 | Generate a Pptx report.
86 |
87 | * **/generate_xlsx**
88 | Generate an xlsx report.
89 |
90 | * **/generate_odt**
91 | Generate an ODT report.
92 |
93 | ## Examples
94 |
95 | To generate a report into PDF
96 |
97 | * **http**
98 | ```
99 | POST /generate_pdf HTTP/1.1
100 | Host: localhost:3000
101 | Content-Type: application/json
102 | Cache-Control: no-cache
103 |
104 | {
105 | "name": "test",
106 | "connection": "none",
107 | "parameters": {
108 | "Parameter1": "Parameter 1",
109 | "Parameter2": "PARAM2"
110 | }
111 | }
112 | ```
113 |
114 | * **go**
115 | ```
116 | package main
117 |
118 | import (
119 | "fmt"
120 | "strings"
121 | "net/http"
122 | "io/ioutil"
123 | )
124 |
125 | func main() {
126 |
127 | url := "http://localhost:3000/generate_pdf"
128 |
129 | payload := strings.NewReader("{\n\t\"name\": \"test\",\n\t\"connection\": \"none\",\n\t\"parameters\": {\n\t\t\"Parameter1\": \"Parameter 1\",\n\t\t\"Parameter2\": \"PARAM2\"\n\t}\n}")
130 |
131 | req, _ := http.NewRequest("POST", url, payload)
132 |
133 | req.Header.Add("content-type", "application/json")
134 | req.Header.Add("cache-control", "no-cache")
135 |
136 | res, _ := http.DefaultClient.Do(req)
137 |
138 | defer res.Body.Close()
139 | body, _ := ioutil.ReadAll(res.Body)
140 |
141 | fmt.Println(res)
142 | fmt.Println(string(body))
143 |
144 | }
145 | ```
146 |
147 | * **nodejs request**
148 | ```
149 | var request = require("request");
150 |
151 | var options = { method: 'POST',
152 | url: 'http://localhost:3000/generate_pdf',
153 | headers:
154 | { 'cache-control': 'no-cache',
155 | 'content-type': 'application/json' },
156 | body:
157 | { name: 'test',
158 | connection: 'none',
159 | parameters: { Parameter1: 'Parameter 1', Parameter2: 'PARAM2' } },
160 | json: true };
161 |
162 | request(options, function (error, response, body) {
163 | if (error) throw new Error(error);
164 |
165 | console.log(body);
166 | });
167 | ```
168 |
169 | * **curl**
170 | ```
171 | curl -X POST \
172 | http://localhost:3000/generate_pdf \
173 | -H 'cache-control: no-cache' \
174 | -H 'content-type: application/json' \
175 | -d '{
176 | "name": "test",
177 | "connection": "none",
178 | "parameters": {
179 | "Parameter1": "Parameter 1",
180 | "Parameter2": "PARAM2"
181 | }
182 | }'
183 | ```
184 |
185 | * **python requests**
186 | ```
187 | import requests
188 |
189 | url = "http://localhost:3000/generate_pdf"
190 |
191 | payload = "{\n\t\"name\": \"test\",\n\t\"connection\": \"none\",\n\t\"parameters\": {\n\t\t\"Parameter1\": \"Parameter 1\",\n\t\t\"Parameter2\": \"PARAM2\"\n\t}\n}"
192 | headers = {
193 | 'content-type': "application/json",
194 | 'cache-control': "no-cache",
195 | }
196 |
197 | response = requests.request("POST", url, data=payload, headers=headers)
198 |
199 | print(response.text)
200 | ```
201 |
202 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | /*
2 | Jasper Server for NodeJS
3 | (c) 2018 Loable Technologies
4 | Andrew M. Loable
5 | https://loable.tech
6 | */
7 | const java = require('java');
8 | const fs = require('fs');
9 | const path = require('path');
10 | const util = require('util');
11 | const tmp = require('tmp');
12 | const sleep = require('sleep');
13 | const async = require('async');
14 | const express = require('express');
15 | const cors = require('cors');
16 | const bodyParser = require('body-parser');
17 | const app = express();
18 | const vm = this;
19 |
20 | vm.modulePath = path.dirname(__filename); // main directory
21 | vm.libraryPath = path.join(vm.modulePath, 'libs'); // Put jars in lib directory
22 |
23 | vm.settings = {
24 | reports: {},
25 | drivers: {},
26 | connections: {}
27 | };
28 |
29 | // Add jar to java classpath
30 | function loadJar(file){
31 | if (path.extname(file) == '.jar'){
32 | console.log("Loading: " + file);
33 | java.classpath.push(file);
34 | }
35 | }
36 |
37 | // Import JasperReports
38 | function importJasperReports(){
39 |
40 | };
41 |
42 | // Returns the connection identified by the report
43 | function getReportConnection(report){
44 | var conn = vm.settings.connections[report.connection];
45 | console.log(conn);
46 | if (conn){
47 | // Return Jasper Connection
48 | return vm.driverManager.getConnectionSync(conn.jdbc, conn.user, conn.password);
49 | } else {
50 | console.error("Connection " + report.connection + " is not registered.");
51 | // Return Empty Data Source
52 | return new vm.jasperEmptyDataSource();
53 | }
54 | };
55 |
56 | // Parse Locale String
57 | function parseLocaleString(str){
58 | var s = str.split(/[_|-]/);
59 | if (s.length > 1){
60 | return vm.locale(s[0], s[1]);
61 | } else {
62 | return vm.locale(s[0]);
63 | }
64 | };
65 |
66 | // Generate JasperPrint from a report
67 | function generateJasperPrint(report){
68 | console.log("check registered reports");
69 | for (var r in vm.settings.reports){
70 | if (report.name === r){
71 | report.jrxml = vm.settings.reports[r].jrxml;
72 | report.subreports = vm.settings.reports[r].subreports;
73 | }
74 | }
75 |
76 | var parameters = new vm.hashMap();
77 |
78 | if (report.jrxml){
79 | jrxmlLoader = java.callStaticMethodSync("net.sf.jasperreports.engine.xml.JRXmlLoader", "load", path.join(vm.modulePath, report.jrxml));
80 | report.jasper = java.callStaticMethodSync("net.sf.jasperreports.engine.JasperCompileManager", "compileReport", jrxmlLoader);
81 | if (report.subreports){
82 | console.log("subreports detected");
83 | for(subreport in report.subreports){
84 | var obj = report.subreports[subreport];
85 | objJrxmlLoader = java.callStaticMethodSync("net.sf.jasperreports.engine.xml.JRXmlLoader", "load", path.join(vm.modulePath, obj.jrxml));
86 | objJasper = java.callStaticMethodSync("net.sf.jasperreports.engine.JasperCompileManager", "compileReport", objJrxmlLoader);
87 | // add subreports as parameters. make sure to use parameters for subreport definition
88 | parameters.putSync(subreport, objJasper);
89 | }
90 | }
91 | } else {
92 | console.error("jrxml not defined in report object");
93 | }
94 |
95 | var toExports = [];
96 |
97 | if (report.jasper){
98 | var toExport = null;
99 |
100 | //process parameters
101 | if (report.parameters){
102 | for (var p in report.parameters) {
103 | if (p === "REPORT_LOCALE") {
104 | report.parameters[p] = parseLocaleString(report.parameters[p]);
105 | }
106 | parameters.putSync(p, report.parameters[p]);
107 | }
108 | }
109 |
110 | // Get connection used by report
111 | var connection = getReportConnection(report);
112 | var jasperPrint = vm.jasperFillManager.fillReportSync(report.jasper, parameters, connection);
113 | return jasperPrint;
114 | } else {
115 | console.error("jasper not generated by previous process");
116 | }
117 |
118 | return null;
119 | };
120 |
121 | // Generate PDF From JasperPrint
122 | function generatePDF(report){
123 | var tmpFile = tmp.fileSync();
124 | var outputFile = tmpFile.name + ".pdf";
125 | var jasperPrint = generateJasperPrint(report);
126 | if (jasperPrint){
127 | var jasperReportsContext = java.callStaticMethodSync("net.sf.jasperreports.engine.DefaultJasperReportsContext", "getInstance");
128 | var exporter = new vm.jasperPdfExporter(jasperReportsContext);
129 | exporter.setExporterInputSync(new vm.simpleExporterInput(jasperPrint));
130 | exporter.setExporterOutputSync(new vm.simpleOutputStreamExporterOutput(outputFile));
131 | exporter.exportReportSync();
132 |
133 | var toStream = fs.readFileSync(outputFile);
134 | fs.unlinkSync(outputFile);
135 | return toStream;
136 | }
137 | return null;
138 | };
139 |
140 | // Generate HTML From JasperPrint
141 | function generateHTML(report){
142 | var tmpFile = tmp.fileSync();
143 | var outputFile = tmpFile.name + ".html";
144 | var jasperPrint = generateJasperPrint(report);
145 | if (jasperPrint){
146 | var jasperReportsContext = java.callStaticMethodSync("net.sf.jasperreports.engine.DefaultJasperReportsContext", "getInstance");
147 | var exporter = new vm.jasperHtmlExporter(jasperReportsContext);
148 | exporter.setExporterInputSync(new vm.simpleExporterInput(jasperPrint));
149 | exporter.setExporterOutputSync(new vm.simpleHtmlExporterOutput(outputFile));
150 | exporter.exportReportSync();
151 |
152 | var toStream = fs.readFileSync(outputFile);
153 | fs.unlinkSync(outputFile);
154 | return toStream;
155 | }
156 | return null;
157 | };
158 |
159 | // Generate RTF From JasperPrint
160 | function generateRTF(report){
161 | var tmpFile = tmp.fileSync();
162 | var outputFile = tmpFile.name + ".rtf";
163 | var jasperPrint = generateJasperPrint(report);
164 | if (jasperPrint){
165 | var jasperReportsContext = java.callStaticMethodSync("net.sf.jasperreports.engine.DefaultJasperReportsContext", "getInstance");
166 | var exporter = new vm.jasperRtfExporter(jasperReportsContext);
167 | exporter.setExporterInputSync(new vm.simpleExporterInput(jasperPrint));
168 | exporter.setExporterOutputSync(new vm.simpleWriterExporterOutput(outputFile));
169 | exporter.exportReportSync();
170 |
171 | var toStream = fs.readFileSync(outputFile);
172 | fs.unlinkSync(outputFile);
173 | return toStream;
174 | }
175 | return null;
176 | };
177 |
178 | // Generate CSV From JasperPrint
179 | function generateCSV(report){
180 | var tmpFile = tmp.fileSync();
181 | var outputFile = tmpFile.name + ".csv";
182 | var jasperPrint = generateJasperPrint(report);
183 | if (jasperPrint){
184 | var jasperReportsContext = java.callStaticMethodSync("net.sf.jasperreports.engine.DefaultJasperReportsContext", "getInstance");
185 | var exporter = new vm.jasperCsvExporter(jasperReportsContext);
186 | exporter.setExporterInputSync(new vm.simpleExporterInput(jasperPrint));
187 | exporter.setExporterOutputSync(new vm.simpleWriterExporterOutput(outputFile));
188 | exporter.exportReportSync();
189 |
190 | var toStream = fs.readFileSync(outputFile);
191 | fs.unlinkSync(outputFile);
192 | return toStream;
193 | }
194 | return null;
195 | };
196 |
197 | // Generate DocX From JasperPrint
198 | function generateDOCX(report){
199 | var tmpFile = tmp.fileSync();
200 | var outputFile = tmpFile.name + ".docx";
201 | var jasperPrint = generateJasperPrint(report);
202 | if (jasperPrint){
203 | var jasperReportsContext = java.callStaticMethodSync("net.sf.jasperreports.engine.DefaultJasperReportsContext", "getInstance");
204 | var exporter = new vm.jasperDocxExporter(jasperReportsContext);
205 | exporter.setExporterInputSync(new vm.simpleExporterInput(jasperPrint));
206 | exporter.setExporterOutputSync(new vm.simpleOutputStreamExporterOutput(outputFile));
207 | exporter.exportReportSync();
208 |
209 | var toStream = fs.readFileSync(outputFile);
210 | fs.unlinkSync(outputFile);
211 | return toStream;
212 | }
213 | return null;
214 | };
215 |
216 | // Generate PptX From JasperPrint
217 | function generatePPTX(report){
218 | var tmpFile = tmp.fileSync();
219 | var outputFile = tmpFile.name + ".pptx";
220 | var jasperPrint = generateJasperPrint(report);
221 | if (jasperPrint){
222 | var jasperReportsContext = java.callStaticMethodSync("net.sf.jasperreports.engine.DefaultJasperReportsContext", "getInstance");
223 | var exporter = new vm.jasperPptxExporter(jasperReportsContext);
224 | exporter.setExporterInputSync(new vm.simpleExporterInput(jasperPrint));
225 | exporter.setExporterOutputSync(new vm.simpleOutputStreamExporterOutput(outputFile));
226 | exporter.exportReportSync();
227 |
228 | var toStream = fs.readFileSync(outputFile);
229 | fs.unlinkSync(outputFile);
230 | return toStream;
231 | }
232 | return null;
233 | };
234 |
235 | // Generate XlsX From JasperPrint
236 | function generateXLSX(report){
237 | var tmpFile = tmp.fileSync();
238 | var outputFile = tmpFile.name + ".xls";
239 | var jasperPrint = generateJasperPrint(report);
240 | if (jasperPrint){
241 | var jasperReportsContext = java.callStaticMethodSync("net.sf.jasperreports.engine.DefaultJasperReportsContext", "getInstance");
242 | var exporter = new vm.jasperXlsxExporter(jasperReportsContext);
243 | exporter.setExporterInputSync(new vm.simpleExporterInput(jasperPrint));
244 | exporter.setExporterOutputSync(new vm.simpleOutputStreamExporterOutput(outputFile));
245 | exporter.exportReportSync();
246 |
247 | var toStream = fs.readFileSync(outputFile);
248 | fs.unlinkSync(outputFile);
249 | return toStream;
250 | }
251 | return null;
252 | };
253 |
254 | // Generate ODT From JasperPrint
255 | function generateODT(report){
256 | var tmpFile = tmp.fileSync();
257 | var outputFile = tmpFile.name + ".odt";
258 | var jasperPrint = generateJasperPrint(report);
259 | if (jasperPrint){
260 | var jasperReportsContext = java.callStaticMethodSync("net.sf.jasperreports.engine.DefaultJasperReportsContext", "getInstance");
261 | var exporter = new vm.jasperOdtExporter(jasperReportsContext);
262 | exporter.setExporterInputSync(new vm.simpleExporterInput(jasperPrint));
263 | exporter.setExporterOutputSync(new vm.simpleOutputStreamExporterOutput(outputFile));
264 | exporter.exportReportSync();
265 |
266 | var toStream = fs.readFileSync(outputFile);
267 | fs.unlinkSync(outputFile);
268 | return toStream;
269 | }
270 | return null;
271 | };
272 |
273 | // Start Of Process
274 | async.auto({
275 | getSettings: function(callback){
276 | console.log("get settings");
277 | vm.settings = JSON.parse(fs.readFileSync('settings.json', 'utf8'));
278 | callback();
279 | },
280 | getJarsFromLib: ['getSettings', function(results, callback){
281 | var dir = vm.libraryPath;
282 | console.log("get jars from " + dir);
283 | var files = fs.readdirSync(dir);
284 | for (var file in files){
285 | file = path.join(dir, files[file]);
286 | var stat = fs.statSync(file);
287 | if (stat && stat.isDirectory()){
288 | // directory found, do not process
289 | console.log("found subdirectory " + file);
290 | } else {
291 | console.log("found file " + file);
292 | // Load Jar
293 | loadJar(file);
294 | }
295 | }
296 | callback();
297 | }],
298 | loadSQLDrivers: ['getJarsFromLib', function(results, callback){
299 | console.log("load sql drivers");
300 | var classLoader = java.callStaticMethodSync("java.lang.ClassLoader", "getSystemClassLoader");
301 | if (vm.settings.drivers){
302 | for (var name in vm.settings.drivers){
303 | var driver = vm.settings.drivers[name];
304 | var file = path.join(vm.modulePath, driver.path);
305 | loadJar(file);
306 | classLoader.loadClassSync(driver.class).newInstanceSync();
307 | }
308 | }
309 | callback();
310 | }],
311 | importJasper: ['loadSQLDrivers', function(results, callback){
312 | console.log("import jasper");
313 | vm.driverManager = java.import("java.sql.DriverManager");
314 | vm.hashMap = java.import("java.util.HashMap");
315 | vm.locale = java.import("java.util.Locale");
316 | vm.byteAraryInputStream = java.import("java.io.ByteArrayInputStream");
317 | vm.jasperEmptyDataSource = java.import("net.sf.jasperreports.engine.JREmptyDataSource");
318 | vm.jasperCompileManager = java.import("net.sf.jasperreports.engine.JasperCompileManager");
319 | vm.jasperFillManager = java.import("net.sf.jasperreports.engine.JasperFillManager");
320 | vm.jasperExportManager = java.import("net.sf.jasperreports.engine.JasperExportManager");
321 | vm.jasperPdfExporter = java.import("net.sf.jasperreports.engine.export.JRPdfExporter");
322 | vm.jasperHtmlExporter = java.import("net.sf.jasperreports.engine.export.HtmlExporter");
323 | vm.jasperRtfExporter = java.import("net.sf.jasperreports.engine.export.JRRtfExporter");
324 | vm.jasperCsvExporter = java.import("net.sf.jasperreports.engine.export.JRCsvExporter");
325 | vm.jasperDocxExporter = java.import("net.sf.jasperreports.engine.export.ooxml.JRDocxExporter");
326 | vm.jasperPptxExporter = java.import("net.sf.jasperreports.engine.export.ooxml.JRPptxExporter");
327 | vm.jasperXlsxExporter = java.import("net.sf.jasperreports.engine.export.ooxml.JRXlsxExporter");
328 | vm.jasperOdtExporter = java.import("net.sf.jasperreports.engine.export.oasis.JROdtExporter");
329 | vm.jasperJsonExporter = java.import("net.sf.jasperreports.engine.export.JsonExporter");
330 | vm.simpleExporterInput = java.import("net.sf.jasperreports.export.SimpleExporterInput");
331 | vm.simpleOutputStreamExporterOutput = java.import("net.sf.jasperreports.export.SimpleOutputStreamExporterOutput");
332 | vm.simpleHtmlExporterOutput = java.import("net.sf.jasperreports.export.SimpleHtmlExporterOutput");
333 | vm.simpleWriterExporterOutput = java.import("net.sf.jasperreports.export.SimpleWriterExporterOutput");
334 | vm.jasperXmlLoader = java.import("net.sf.jasperreports.engine.xml.JRXmlLoader")
335 | callback();
336 | }]
337 | },
338 | function(error, results) {
339 | console.log("start express");
340 | // Start of Express
341 | app.use(cors({ origin: true }));
342 | app.use(bodyParser.json());
343 |
344 | app.post("/generate_pdf", function(req, res){
345 | var report = req.body;
346 | if (report){
347 | console.log(report);
348 | var obj = generatePDF(report);
349 | res.setHeader('Content-Disposition', 'attachment; filename=' + report.name + ".pdf");
350 | res.contentType("application/pdf");
351 | res.send(obj);
352 | return;
353 | } else {
354 | res.status(400).send("invalid parameters");
355 | }
356 |
357 | });
358 | app.post("/generate_html", function(req, res){
359 | var report = req.body;
360 | if (report){
361 | console.log(report);
362 | var obj = generateHTML(report);
363 | res.setHeader('Content-Disposition', 'attachment; filename=' + report.name + ".html");
364 | res.contentType("text/html");
365 | res.send(obj);
366 | return;
367 | } else {
368 | res.status(400).send("invalid parameters");
369 | }
370 |
371 | });
372 | app.post("/generate_rtf", function(req, res){
373 | var report = req.body;
374 | if (report){
375 | console.log(report);
376 | var obj = generateRTF(report);
377 | res.setHeader('Content-Disposition', 'attachment; filename=' + report.name + ".rtf");
378 | res.contentType("application/rtf");
379 | res.send(obj);
380 | return;
381 | } else {
382 | res.status(400).send("invalid parameters");
383 | }
384 |
385 | });
386 | app.post("/generate_csv", function(req, res){
387 | var report = req.body;
388 | if (report){
389 | console.log(report);
390 | var obj = generateCSV(report);
391 | res.setHeader('Content-Disposition', 'attachment; filename=' + report.name + ".csv");
392 | res.contentType("application/rtf");
393 | res.send(obj);
394 | return;
395 | } else {
396 | res.status(400).send("invalid parameters");
397 | }
398 |
399 | });
400 | app.post("/generate_docx", function(req, res){
401 | var report = req.body;
402 | if (report){
403 | console.log(report);
404 | var obj = generateDOCX(report);
405 | res.setHeader('Content-Disposition', 'attachment; filename=' + report.name + ".docx");
406 | res.contentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
407 | res.send(obj);
408 | return;
409 | } else {
410 | res.status(400).send("invalid parameters");
411 | }
412 |
413 | });
414 | app.post("/generate_pptx", function(req, res){
415 | var report = req.body;
416 | if (report){
417 | console.log(report);
418 | var obj = generatePPTX(report);
419 | res.setHeader('Content-Disposition', 'attachment; filename=' + report.name + ".pptx");
420 | res.contentType("application/vnd.openxmlformats-officedocument.presentationml.presentation");
421 | res.send(obj);
422 | return;
423 | } else {
424 | res.status(400).send("invalid parameters");
425 | }
426 |
427 | });
428 | app.post("/generate_xlsx", function(req, res){
429 | var report = req.body;
430 | if (report){
431 | console.log(report);
432 | var obj = generateXLSX(report);
433 | res.setHeader('Content-Disposition', 'attachment; filename=' + report.name + ".xlsx");
434 | res.contentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
435 | res.send(obj);
436 | return;
437 | } else {
438 | res.status(400).send("invalid parameters");
439 | }
440 |
441 | });
442 | app.post("/generate_odt", function(req, res){
443 | var report = req.body;
444 | if (report){
445 | console.log(report);
446 | var obj = generateODT(report);
447 | res.setHeader('Content-Disposition', 'attachment; filename=' + report.name + ".odt");
448 | res.contentType("application/vnd.oasis.opendocument.text");
449 | res.send(obj);
450 | return;
451 | } else {
452 | res.status(400).send("invalid parameters");
453 | }
454 |
455 | });
456 |
457 | console.log("Listening at port 3000");
458 | app.listen(3000, 'localhost');
459 | });
460 |
461 |
462 |
463 |
464 |
--------------------------------------------------------------------------------