首页 > 解决方案 > 如何使用 Node js 将数据发送到 Jasper Report?

问题描述

我是 Jasper Reports 的新手,并试图将 jasper 报告与我的节点 js (express) 应用程序连接起来。为此,我尝试了 node-jasper 节点模块,不幸的是,我无法将数据发送到 jasper 报告,因为我无法理解该机制是如何工作的。

我会简要地告诉你我做了什么。

  1. 首先,我在我的 express 项目中安装了 node-jasper 模块。
  2. 然后我按照 node-jasper Github 页面(' https://github.com/agmoyano/node-jasper ')中的描述做了所有事情。我正在使用带有 JDBC 的 Progress OpenEdge 数据库。(我从数据库获取数据没有问题)
  3. 为了创建 Jasper 报告,我使用了 Jasper Studio。通过使用它,我创建了 employees.jrxml 文件并将其添加到报告目录中。
  4. 但是在启动服务器后,我遇到了两个错误,调用我下载并放入 express 项目目录的 jasperreports-6.10.0 库中缺少 lib 和 dist 文件夹。
  5. 然后我创建了这两个文件夹。然后我收到一个错误,称为缺少一些 jar 文件。
  6. 为此,我从“ https://jar-download.com/artifacts/net.sf.jasperreports/jasperreports/6.10.0 ”网站下载了 jasper 报告 6.10.0 版的所有 jar 文件,并将所有这些 jar 文件都放入我创建的 lib 和 dist 文件夹。
  7. 然后那个错误就消失了。
  8. 但是在我要调用“/pdf”休息端点之后,报告被创建为employee.pdf,但没有任何数据。它只是一个没有任何内容的空pdf。

你们中的任何人都可以帮助我如何将数据发送到 jasper 报告以及如何获得包含所有内容的 pdf 输出吗?

我要问的另一个问题是,我们是否可以如下所述在报表对象内部执行 SQL 查询,而不是调用数据集?

expressApp.get('/pdf', function(req, res, next) {

var report = {
    report: 'employee',
    data: {
        // id: parseInt(req.query.id, 10),
-------- do a sql query to get data instead of passing json object ----------------------
        secundaryDataset: jasper.toJsonDataSource({
            data: [{ emp_name: "ABCD", nic: "V123456789" }] 
        }, 'data')
    },

--------- do a sql query to get dataset instead of passing json object ------------------
    dataset: [
        {
            emp_name: "ABCD",
            nic: "V123456789"
        },
        {
            emp_name: "EFGH",
            nic: "V987654321"
        }
    ]
}

var pdf = jasper.pdf(report);

res.set({
    'Content-type': 'application/pdf',
    'Content-Length': pdf.length
});
res.send(pdf);
});

另外,我们可以使用 node-jasper 节点模块生成什么类型​​的输出?(例如: - pdf、csv 等)

我附上了我的 index.js 文件内容、employee.jrxml 文件内容和项目目录结构的一些截图。

谢谢你!

injex.js 文件内容

var express = require('express');
var bodyparser = require('body-parser');
var cors = require('cors');
var portNumber = require('./dependencies/dependencies');
const oeConnection = require('./databaseHelpers/oeWrapper');
var path = require('path');
var fs = require('fs');

var expressApp = express();

var jasper = require('node-jasper')({
path: path.join(__dirname + '/lib/jasperreports-6.10.0'),
reports: {
    employee: {
        jrxml: path.join(__dirname + '/reports/employees.jrxml')
    }
},
drivers: {
    openedge: {
        path: path.join(__dirname + 'drivers/openedge.jar'),
        class: 'com.ddtek.jdbc.openedge.OpenEdgeDriver',
        type: 'openedge'
    }
},
conns: {
    dbserver1: {
        jdbc: 'jdbc:datadirect:openedge://localhost:6400;databaseName=jasperdb',
        user: 'root',
        pass: 'root',
    }
},
defaultConn: 'dbserver1'
});

expressApp.use(cors());

expressApp.use(bodyparser.json());

expressApp.get('/pdf', function(req, res, next) {

var report = {
    report: 'employee',
    data: {
        // id: parseInt(req.query.id, 10),
        secundaryDataset: jasper.toJsonDataSource({
            data: [{ emp_name: "ABCD", nic: "V123456789" }]
        }, 'data')
    },
    dataset: [
        {
            emp_name: "ABCD",
            nic: "V123456789"
        },
        {
            emp_name: "EFGH",
            nic: "V987654321"
        }
    ]
}

var pdf = jasper.pdf(report);

res.set({
    'Content-type': 'application/pdf',
    'Content-Length': pdf.length
});
res.send(pdf);
});

expressApp.listen(portNumber.PORT, function(){

});

employee.jrxml 内容

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.9.0.final using JasperReports Library version 6.9.0- 
cb8f9004be492ccc537180b49c026951f4220bf3  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports 
http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="employees" pageWidth="595" 
pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" 
uuid="e477f8f4-274a-42e0-9da9-febb03865039">
<property name="com.jaspersoft.studio.data.sql.tables" value=""/>
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="ProgressOE"/>
<subDataset name="secundaryDataset" uuid="03225756-cc2d-4b65-a73e-6f232480ffa6">
    <property name="com.jaspersoft.studio.data.sql.tables" value=""/>
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="ProgressOE"/>
    <queryString language="JSON">
        <![CDATA[]]>
    </queryString>
    <field name="emp_name" class="java.lang.String">
        <property name="com.jaspersoft.studio.field.label" value="emp_name"/>
    </field>
    <field name="nic" class="java.lang.String">
        <property name="com.jaspersoft.studio.field.label" value="nic"/>
    </field>
</subDataset>
<queryString language="JSON">
    <![CDATA[]]>
</queryString>
<field name="emp_name" class="java.lang.String">
    <property name="com.jaspersoft.studio.field.label" value="emp_name"/>
</field>
<field name="nic" class="java.lang.String">
    <property name="com.jaspersoft.studio.field.label" value="nic"/>
</field>
<background>
    <band/>
</background>
<title>
    <band height="72">
        <frame>
            <reportElement mode="Opaque" x="-20" y="-20" width="595" height="92" backcolor="#006699" 
 uuid="7e7561f7-a817-4d3d-bfc6-29865506aa24"/>
            <staticText>
                <reportElement x="20" y="20" width="234" height="43" forecolor="#FFFFFF" 
 uuid="b48f6848-3160-4d1d-9a24-b6ccb7b7cb66"/>
                <textElement>
                    <font size="34" isBold="true"/>
                </textElement>
                <text><![CDATA[Employee List]]></text>
            </staticText>
            <staticText>
                <reportElement x="395" y="43" width="180" height="20" forecolor="#FFFFFF" 
 uuid="c2398724-6d3a-446e-8ad2-80f9fd52e52d"/>
                <textElement textAlignment="Right">
                    <font size="14" isBold="false"/>
                </textElement>
                <text><![CDATA[Sample Report]]></text>
            </staticText>
        </frame>
    </band>
 </title>
 <pageHeader>
    <band height="13"/>
</pageHeader>
<columnHeader>
    <band height="21">
        <line>
            <reportElement x="-20" y="20" width="595" height="1" forecolor="#666666" uuid="bc1eb0ea- 
e8e7-4ebb-8779-4a2b3b7f00b8"/>
        </line>
        <staticText>
            <reportElement mode="Opaque" x="0" y="0" width="277" height="20" forecolor="#006699" 
backcolor="#E6E6E6" uuid="103315ad-2289-42e5-ae69-fbcaf92f7f20">
                <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="e665037b-a8ba- 
4c3e-b060-61296b94c1a6"/>
            </reportElement>
            <textElement textAlignment="Center">
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[emp_name]]></text>
        </staticText>
        <staticText>
            <reportElement mode="Opaque" x="277" y="0" width="277" height="20" forecolor="#006699" 
 backcolor="#E6E6E6" uuid="a9e3611e-49a4-4c36-ad6c-3db17853cb96">
                <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="15ed3288-7c9d- 
 4795-9704-55b9fdccff62"/>
            </reportElement>
            <textElement textAlignment="Center">
                <font size="14" isBold="true"/>
            </textElement>
            <text><![CDATA[nic]]></text>
        </staticText>
    </band>
 </columnHeader>
 <detail>
    <band height="20">
        <line>
            <reportElement positionType="FixRelativeToBottom" x="0" y="19" width="555" height="1" 
 uuid="46205314-fb81-4792-a256-7dcfbd0959f7"/>
        </line>
        <textField isStretchWithOverflow="true">
            <reportElement x="0" y="0" width="277" height="20" uuid="1dc6cba3-d034-4760-b08e- 
 66c2b52e91a8">
                <!-- <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="e665037b- 
 a8ba-4c3e-b060-61296b94c1a6"/> -->
            <!-- </reportElement>
            <textElement>
                <font size="14"/>
            </textElement> -->
            <textFieldExpression><![CDATA[$F{emp_name}]]></textFieldExpression>
        </textField>
        <textField isStretchWithOverflow="true">
            <reportElement x="277" y="0" width="277" height="20" uuid="a5a4adb0-350a-45b0-b646- 
 20bc0f1dcd3c">
                <!-- <property name="com.jaspersoft.studio.spreadsheet.connectionID" value="15ed3288- 
 7c9d-4795-9704-55b9fdccff62"/> -->
            <!-- </reportElement>
            <textElement>
                <font size="14"/>
            </textElement> -->
            <textFieldExpression><![CDATA[$F{nic}]]></textFieldExpression>
        </textField>
    </band>
 </detail>
 <columnFooter>
    <band/>
 </columnFooter>
 <pageFooter>
    <band height="17">
        <textField>
            <reportElement mode="Opaque" x="0" y="4" width="515" height="13" backcolor="#E6E6E6" 
 uuid="cdec6bec-da10-4969-b227-5cdf63e411f5"/>
            <textElement textAlignment="Right"/>
            <textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
        </textField>
        <textField evaluationTime="Report">
            <reportElement mode="Opaque" x="515" y="4" width="40" height="13" backcolor="#E6E6E6" 
 uuid="df97dff6-5734-49e5-a903-243cf69079d8"/>
            <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
        </textField>
        <textField pattern="EEEEE dd MMMMM yyyy">
            <reportElement x="0" y="4" width="100" height="13" uuid="b42d37dd-9ffe-4d28-9be5- 
 2ce2e8b5d2e4"/>
            <textFieldExpression><![CDATA[new java.util.Date()]]></textFieldExpression>
        </textField>
    </band>
 </pageFooter>
 <summary>
    <band/>
 </summary>
 </jasperReport>

项目结构: 项目结构

jasperreport-6.10.0 库中的 lib 和 dist 文件夹: jasperreport-6.10.0 库中的 lib 和 dist 文件夹

在 lib 文件夹中下载并添加 jar 文件: 在 lib 文件夹中下载并添加 jar 文件

在 dist 文件夹中下载并添加 jar 文件: 在 dist 文件夹中下载并添加 jar 文件

标签: node.jsjasper-reportsopenedge

解决方案


推荐阅读