如何结合两个已经运作的报告?

时间:2016-02-01 18:21:34

标签: jasper-reports subreport

我对子报告做了一些研究,甚至建立了使用多个子报告的报告。

我遇到了一个问题,即合并了两个已经制作好的报告,以便它们都可以运行并打印出来( 首页上的一个 一个第二个页 )。

我该怎么做? 我是否必须在这些报告SQL语句中包含每个项目,还是仅包含导致输入的参数?

我正在使用iReport构建我的自定义jasper报告,

2 个答案:

答案 0 :(得分:1)

您有2个选项

<强> 1。合并报表创建主报表并将报表包含在子报表中。您需要将保证金设置为0,whenNoDataType="AllSectionsNoDetail",例如使用summary频段为报告2设置isSummaryNewPage="true"生成新页面。您无需更改任何查询,因为您只需将报表连接传递给报表(子报表)。

实施例

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="test" pageWidth="612" pageHeight="792" whenNoDataType="AllSectionsNoDetail" columnWidth="612" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" isSummaryNewPage="true" uuid="9ac8b394-36b0-409a-8a94-b8147d9c2d20">
    <parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
        <defaultValueExpression><![CDATA["C:\\jdd\\projects\\StackTrace\\jasper\\"]]></defaultValueExpression>
    </parameter>
    <title>
        <band height="20">
            <subreport>
                <reportElement x="0" y="0" width="612" height="20" uuid="e98a3620-58d6-47c1-8c93-6ca3d749b31b"/>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report1.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </title>
    <summary>
        <band height="20">
            <subreport>
                <reportElement x="0" y="0" width="612" height="20" uuid="bc0c1758-9ce9-4f6d-a01c-2c77f59ae1fa"/>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <subreportExpression><![CDATA[$P{SUBREPORT_DIR} + "report2.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </summary>
</jasperReport>

<强> 2。在导出期间连接报告

示例(pdf导出与其他类型的导出类似)

Map<String, Object> paramMap = new HashMap<String, Object>();
List<JasperPrint> jasperPrintList = new ArrayList<JasperPrint>();
JasperPrint jasperPrint1 = JasperFillManager.fillReport(report1, paramMap);
jasperPrintList.add(jasperPrint1);
JasperPrint jasperPrint2 = JasperFillManager.fillReport(report2, paramMap);
jasperPrintList.add(jasperPrint2);

JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(SimpleExporterInput.getInstance(jasperPrintList)); //Set as export input my list with JasperPrint s
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput("output.pdf")); //or any other out stream
SimplePdfExporterConfiguration configuration = new SimplePdfExporterConfiguration();
exporter.setConfiguration(configuration);
exporter.exportReport();

答案 1 :(得分:1)

现在有第三种方法可以将它们连接起来,特别是如果报告具有不同的页面大小和/或方向。

您可以将它们作为书籍报告中的部分运行,而不是在主报告中将它们作为子报告运行。

请检查JR Lib project distro包中的/ demo / samples / book示例,您可以看到3个不同布局的报告如何一起运行以生成单个文件输出。

此外,/demo/samples/tableofcontents sample依赖于这种新类型的报告模板,我们将其称为书籍,由部分而非乐队组成。