从java生成带有子报告的Jasper报告

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/9785451/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-16 07:38:48  来源:igfitidea点击:

Generate Jasper report with subreport from java

javajasper-reports

提问by kandarp

I know how to generate jasper report without any subreport. But currently I have a subreport in my report and I would like to know how can I compile that subreport in java?

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

采纳答案by Alex K

You can compile the subreport like the simple report - with help of JasperCompileManager.compileReport(java.lang.String sourceFileName)method, for example.

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

After that you can pass the compiled subreport as parameter to the master report.

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

The sample:

样品:

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);

The snippet from the master report's jrxml file (sample):

主报告的 jrxml 文件(示例)中的片段:

<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>


Notes

笔记

I mentioned an old API for generating result: JasperFillManager.fillReportToFile(JasperReport, String, Map, java.sql.Connection)

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

In case using JasperReports 6.xit is better to use exporters (concrete implementation of net.sf.jasperreports.export.Exporterinterface, for example JRPdfExporter) for generating output file

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

The example how to use Exporter right can be found here

可以在此处找到如何使用 Exporter 权限的示例