【问题标题】:Generate Jasper report with subreport from java使用来自 java 的子报告生成 Jasper 报告
【发布时间】:2012-03-20 10:58:59
【问题描述】:

我知道如何在没有任何子报告的情况下生成 jasper 报告。但目前我的报告中有一个子报告,我想知道如何在 java 中编译该子报告?

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    您可以像简单报告一样编译子报告 - 例如,借助 JasperCompileManager.compileReport(java.lang.String sourceFileName) 方法。

    之后,您可以将编译后的子报表作为参数传递给主报表。

    样本:

    JasperReport jasperMasterReport = JasperCompileManager.compileReport(masterReportSource);
    JasperReport jasperSubReport = JasperCompileManager.compileReport(subReportSource);
    
    Map<String, Object> parameters = new HashMap()<String, Object>;
    parameters.put("subreportParameter", jasperSubReport);
    
    JasperFillManager.fillReportToFile(jasperMasterReport, parameters, outputFileName, connection);
    

    主报告的 jrxml 文件中的 sn-p(示例):

    <parameter name="subreportParameter" class="net.sf.jasperreports.engine.JasperReport"/>
    ...
    <detail>
        <band height="50">
            ...
            <subreport>
                    <reportElement isPrintRepeatedValues="false" x="5" y="25" width="325" height="20" isRemoveLineWhenBlank="true" backcolor="#ffcc99"/>
                    <subreportParameter name="City">
                        <subreportParameterExpression><![CDATA[$F{City}]]></subreportParameterExpression>
                    </subreportParameter>
                    <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                    <returnValue subreportVariable="PriceSum" toVariable="ProductTotalPrice" calculation="Sum"/>
                    <subreportExpression class="net.sf.jasperreports.engine.JasperReport"><![CDATA[$P{subreportParameter}]]></subreportExpression>
                </subreport>
    

    注意事项

    我提到了一个用于生成结果的旧 API: JasperFillManager.fillReportToFile(JasperReport, String, Map, java.sql.Connection)

    如果使用 JasperReports 6.x,最好使用导出器(net.sf.jasperreports.export.Exporter 接口的具体实现,例如 JRPdfExporter)用于生成输出文件

    Exporter权限使用示例见here

    【讨论】:

    • 我可以使 x,y,width,height 的值动态化吗?
    • @VivekYadav 是的,在 Java API 的帮助下
    • 我正在尝试但没有成功。你能发布一个例子,我该怎么做?
    • How can we add multiple sub report in master Dynamically ? ?
    • @ShadowGames 我在回答时添加了信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多