2011-11-24 129 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);