jasper-reports动态子报告生成

时间:2011-11-24 12:15:04

标签: jasper-reports

我正在尝试使用jasper-reports(没有iReport)从java代码生成报告。

已成功创建以下元素:

  • 主报告对象(类:JasperDesign)名为 reportDesign
  • 名为 subReportDesign
  • 的子报表对象(类:JasperDesign)
  • Master报告中的SubReport元素(类:JRDesignSubreport)名为 subReportElement
  • 编译子报告(类:JasperDesign)名为 subReport

问题是,如何从 subReportElement 中引用 subReportDesign 对象?

到目前为止,我发现的唯一方法是将 subReportElement 的“表达式”字段设置为$P{REPORT_PARAMETERS_MAP}.get("subreportobject"),并将 > subReport 加入 reportDesign

还有其他方法吗?例如,我可以在编译主报告之前以某种方式使用变量吗?

感谢, krisy

1 个答案:

答案 0 :(得分:1)

如果子报表XML文件不在已知位置,则报表参数映射是唯一的方法。它确实需要我发现的临时文件,但这是在几年前。我做了类似的设置(JRXML在数据库中)。对于每个子报告,我必须在编译主报告之前执行此操作:

 byte[] bytes = subreportXMLString.getBytes("UTF-8");
 InputStream input = new ByteArrayInputStream(bytes);

 File compiledReportFile = File.createTempFile(subreportParameterName, ".jasper");
 FileOutputStream buffer = new FileOutputStream(compiledReportFile);
 JasperCompileManager.compileReportToStream(input, buffer);
 input.close();
 buffer.close();
 reportParameters.put(subreportParameterName, compiledReportFile);