使用Node-Jasper包在Node.js中生成报告 [英] Report Generation in Node.js Using Node-Jasper Package

查看:127
本文介绍了使用Node-Jasper包在Node.js中生成报告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆