2011-11-24 90 views
4

我试图从java代码与jasper报告(无iReport)生成报告。jasper-reports动态子报告生成

已成功创建了以下元素:一个名为reportDesign

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

    的问题是,我怎么引用subReportDesign对象从subReportElement

    到目前为止,我发现的唯一途径,就是的‘表情’字段设置subReportElement到$P{REPORT_PARAMETERS_MAP}.get("subreportobject"),并把报表reportDesign编译过程中。

    还有别的办法吗?例如,我可以在编译主报告之前使用变量 - 以某种方式.. -

    感谢, krisy

    +0

    您想实现什么? –

    +0

    我想知道,填充report_parameters_map是唯一的方法,使用子报表(除了写入硬盘上的jrxml文件)? – krisy

    回答

    0

    如果报表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);