使用Node-Jasper包在Node.js中生成报告 [英] Report Generation in Node.js Using Node-Jasper Package
问题描述
我正在尝试使用node.js中的node-jasper包生成报告. 当我编写不带类实现的代码时,代码工作正常,下面是可行的代码.
I am trying to generate a report using node-jasper package in node.js. When i write the code without class implementation then the code works fine following is the workable code.
jasper = require('node-jasper')({
path: '../lib/jasperreports-5.6.0',
reports: {
hw: {
jasper: '../jasperFiles/NodeIreportTest.jasper'
}
},
drivers: {
mysql: {
path: '../lib/com.mysql.jdbc_5.1.5.jar',
class: 'com.mysql.jdbc.Driver', //odbc driver//sun.jdbc.odbc.JdbcOdbcDriver //mysqlDriver// com.mysql.jdbc.Driver
type: 'mysql'
}
},
conns: {
dbserver1: {
host: '192.168.1.164',
port: 3306,
dbname: 'dbname',
user: 'user',
pass: '1234',
driver: 'mysql'
}
},
defaultConn: 'dbserver1'
});
以下是我调试代码时发现的完整对象.具有(hm)属性.
Following is complete object found when i debug the code. which is having (hm) property.
但是当我尝试介绍这些类并使代码标准成为标准时,我得到了错误TypeError: self.hm is not a constructor
以下是相同代码的类实现
but when i tried to introduce the classes and make the code standard i get and error TypeError: self.hm is not a constructor
following is class implementation of the same code
class ReportModel {
constructor(strJasperPath, objDataObject, intClientIP) {
this.strJasperPath = strJasperPath;
this.objDataObject = objDataObject;
this.intClientIP = intClientIP;
}
makeReport() {
return new Promise ((resolve, reject) => {
jasper = require('node-jasper')({
path: '../lib/jasperreports-5.6.0',
reports: {
hw: {
//jasper: '../jasperFiles/NodeIreportTest.jasper'
jasper: '../jasperFiles/' + this.strJasperPath + '.jasper' //path to report
}
},
drivers: {
mysql: {
path: '../lib/com.mysql.jdbc_5.1.5.jar',
class: 'com.mysql.jdbc.Driver', //odbc driver//sun.jdbc.odbc.JdbcOdbcDriver //mysqlDriver// com.mysql.jdbc.Driver
type: 'mysql'
}
},
conns: {
dbserver1: {
host: '192.168.1.164',
port: 3306,
dbname: 'dbname',
user: 'user',
pass: '1234',
driver: 'mysql'
}
},
defaultConn: 'dbserver1'
});
var report = {
report: 'hw',
data: this.objDataObject
}
var pdf = jasper.pdf(report);
var strReportName = this.strJasperPath + intClientIP + '.pdf'
var filepath = "./reports/" + strReportName
var filename = {
"filepath": serverConfig.reporthost + path.basename(filepath)
};
//check if file is present or not
fs.access(filepath, fs.constants.F_OK | fs.constants.W_OK, (err) => {
if (err) {
//file is not present
fs.writeFile("./reports/" + strReportName, new Buffer(pdf, 'binary'), (err) => {
if (err) {
reject(err);
}
resolve(filename);
});
} else {
//file is present then delete it and then create it
fs.unlink(filepath, (err) => {
if (err) {
reject(err);
} else {
fs.writeFile("./reports/" + strReportName, new Buffer(pdf, 'binary'), (err) => {
if (err) {
console.log('WriteFile', err)
}
resolve(filename);
});
}
});
}
});
});
}
}
以下是在类实现中不具有hm属性的对象.
following is the object which is not having hm property with class implementation.
推荐答案
步骤1)从类主体中删除Jasper声明,并从其主体中删除硬件对象,如下面的代码
Step 1) Remove your Jasper declaration out of the class body and remove hw object from it like below code
jasper = require('node-jasper')({
path: '../lib/jasperreports-5.6.0',
reports: {
// hw removed from this place
},
drivers: {
mysql: {
path: '../lib/com.mysql.jdbc_5.1.5.jar',
class: 'com.mysql.jdbc.Driver', //odbc driver//sun.jdbc.odbc.JdbcOdbcDriver //mysqlDriver// com.mysql.jdbc.Driver
type: 'mysql'
}
},
conns: {
dbserver1: {
host: '192.168.1.164',
port: 3306,
dbname: 'node_incrency_minpcs',
user: 'RAHUL',
pass: '1234',
driver: 'mysql'
}
},
defaultConn: 'dbserver1'
});
第2步)在构造函数中添加硬件对象的声明,如下所示
Step 2) Add declaration of hw object in constructor like below
constructor(strReportName) {
jasper.reports = {
hw: {
jasper: '../jasperFiles/' + strReportName+ '.jasper'
}
}
}
步骤3)将其他参数添加到makeReport
函数作为makeReport(strJasperPath, objDataObject, intClientIP)
Step 3) add other parameters to function body that is makeReport
function as makeReport(strJasperPath, objDataObject, intClientIP)
希望这对您有用.
这篇关于使用Node-Jasper包在Node.js中生成报告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!