【问题标题】:Generate jasper report using singe java bean使用单个 java bean 生成碧玉报告
【发布时间】:2015-04-23 17:53:40
【问题描述】:

我需要创建订单申报报告,我正在使用 jasper studio 创建 jasper 模板。在该模板中,我有订单 ID、客户详细信息和他的地址,我必须使用这些详细信息创建报告。

我有以下jasper报告代码

    JasperCompileManager.compileReportToFile("src/main/resource/orderDeclarationForm.jrxml");
    JasperPrint jasperPrint = JasperFillManager.fillReport("src/main/resource/orderDeclarationForm.jasper", new HashMap<String, Object>(), new JRTableModelDataSource(getTableModelData()));
    // JasperExportManager.exportReportToPdfFile("resource/orderDeclarationForm.jrprint");
    JasperExportManager.exportReportToPdfFile(jasperPrint, "src/main/resource/orderDeclarationForm.pdf");

但是我必须传递 java bean 类而不是 JRTableModelDataSource,所以 jasper 引擎必须从一个 java bean 中获取数据,我已经通过 javabean as datasource 获取 bean 列表,但我的要求只是一个具有订单详细信息的 bean。请给我建议

【问题讨论】:

  • 首先,它应该是“src/main/resources”而不是“src/main/resource”。其次,你不应该在 java 代码中引用“src/main/resources”。这个文件夹应该被添加到运行时类,你应该简单地引用“orderDeclarationForm.jrxml”
  • @LanceJava thx 指出,将解决这些问题

标签: java jasper-reports javabeans


【解决方案1】:

如果您只需要将 bean 的一个实例传递给 JasperFillManager.fillReport 方法,那么只要它们的计数是可行的,就可以将它们作为参数传递(在您的情况下,它只是3).

    Map<String,Object> params = new HashMap<String,Object>();
    params.put("orderId", xxx);
    params.put("customerDetails", xxx);
    params.put("address", xxx);

然后,传递这个参数 Map 对象:

JasperPrint jasperPrint = JasperFillManager.fillReport("src/main/resource/orderDeclarationForm.jasper", params, new JRTableModelDataSource(getTableModelData()));

请查看this 链接以获取有关如何从 .jrxml 文件中读取参数的更多信息。

谢谢。

【讨论】: