node.js - 如何使用 Node js 将数据发送到 Jasper Report?
问题描述
我是 Jasper Reports 的新手,并试图将 jasper 报告与我的节点 js (express) 应用程序连接起来。为此,我尝试了 node-jasper 节点模块,不幸的是,我无法将数据发送到 jasper 报告,因为我无法理解该机制是如何工作的。
我会简要地告诉你我做了什么。
- 首先,我在我的 express 项目中安装了 node-jasper 模块。
- 然后我按照 node-jasper Github 页面(' https://github.com/agmoyano/node-jasper ')中的描述做了所有事情。我正在使用带有 JDBC 的 Progress OpenEdge 数据库。(我从数据库获取数据没有问题)
- 为了创建 Jasper 报告,我使用了 Jasper Studio。通过使用它,我创建了 employees.jrxml 文件并将其添加到报告目录中。
- 但是在启动服务器后,我遇到了两个错误,调用我下载并放入 express 项目目录的 jasperreports-6.10.0 库中缺少 lib 和 dist 文件夹。
- 然后我创建了这两个文件夹。然后我收到一个错误,称为缺少一些 jar 文件。
- 为此,我从“ https://jar-download.com/artifacts/net.sf.jasperreports/jasperreports/6.10.0 ”网站下载了 jasper 报告 6.10.0 版的所有 jar 文件,并将所有这些 jar 文件都放入我创建的 lib 和 dist 文件夹。
- 然后那个错误就消失了。
- 但是在我要调用“/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 文件夹:
在 lib 文件夹中下载并添加 jar 文件:
在 dist 文件夹中下载并添加 jar 文件:
解决方案
推荐阅读
- scala - 在使用 udf 进行操作时,将数据框中的空值保持为空
- javascript - 如何在javascript中分组并检测是否存在
- javascript - 根据索引反应setState多个数组
- python - Python函数中的嵌入式SQL(SQLite)提供错误的输出
- python-3.x - 如何在底图投影上绘制散点图?
- python - 无法使用 predict() 函数预测 ARIMA 中给定输入日期的值
- php - 我修改后的 php 邮件功能不起作用
- python - 存储站点特定设置的最佳位置在哪里?
- arrays - 从 php 访问 json_decode 数组值
- javascript - 如何拆分并获取字符串中的值