You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js调用Jasperserver REST API获取PDF报表仅得元数据问题

解决Jaspersoft Server REST API获取PDF报表的问题

你当前调用的/resources/reports/Report/test端点是用来获取报表资源的元数据信息,不是执行报表并导出PDF的接口——这就是为什么你只拿到元数据的原因。要获取PDF格式的报表,需要调整以下几个关键点:

1. 使用正确的报表执行端点

Jaspersoft REST API中,执行报表并导出指定格式的端点格式为:

http://localhost:8080/jasperserver/rest_v2/reports/{报表路径}.{格式}

比如你要导出PDF,路径应该是http://localhost:8080/jasperserver/rest_v2/reports/Report/test.pdf

2. 规范认证方式

别把用户名密码放在URL参数里,改用HTTP Basic认证更安全规范,axios可以通过auth配置项直接实现。

3. 设置正确的响应类型

PDF是二进制数据,必须告诉axios以arraybuffer或blob格式接收响应,否则二进制数据会被转成字符串损坏。

修改后的代码示例

axios.get("http://localhost:8080/jasperserver/rest_v2/reports/Report/test.pdf", {
  auth: {
    username: "jasperadmin",
    password: "jasperadmin"
  },
  responseType: 'arraybuffer' // 必须设置,确保二进制数据正确接收
})
.then(function (response) {
  // 处理PDF二进制数据,比如保存到本地
  const fs = require('fs');
  fs.writeFileSync('./report.pdf', response.data);
  console.log("PDF报表已保存");
  resolve(response.data);
})
.catch(function (error) {
  console.log("获取报表出错: ", error.message);
  reject({
    status: error.response?.status || 201,
    timestamp: new Date().getTime(),
    message: "执行报表时出错",
    success: false,
  });
})
.finally(function () {
  // 后续逻辑
});

额外说明

  • 如果不想在URL里加.pdf后缀,也可以通过设置请求头Accept: application/pdf来指定导出格式,端点用http://localhost:8080/jasperserver/rest_v2/reports/Report/test即可。
  • 如果需要传递报表参数(比如查询条件),可以通过params配置项添加,比如params: { startDate: '2024-01-01' }。

内容的提问来源于stack exchange,提问作者GisCat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:07:15