【问题标题】:How to combine two already functioning reports?如何合并两个已经运行的报告?
【发布时间】:2016-02-01 18:21:33
【问题描述】:

我对子报表进行了一些研究,甚至构建了使用多个子报表的报表。

我在合并 2 个已生成的报告时遇到问题,以便它们同时运行和打印出来(一个在第一页一个在第二页页)。

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

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

【问题讨论】:

    标签: jasper-reports subreport


    【解决方案1】:

    你有两个选择

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

    【讨论】:

    • Petter 我觉得我的一切都是正确的,但是当我尝试显示它时,它只会继续运行。我没有收到任何错误,但它不会同时运行它们。这是因为我将它们都放在了详细信息横幅中吗?
    • 是的,不要把它们放在详细带中,如果你需要传递一个 EmptyDatasource(1) 并且你无法控制报表 2 的分页符
    • 检查我如何使用标题栏和摘要栏作为示例设置 whenNoDataType="AllSectionsNoDetail" 并确保您通过报告连接
    • 太棒了!将一个放在 Title 乐队,一个放在 Summery 乐队工作!谢谢彼得!
    【解决方案2】:

    现在有第三种连接它们的方法,尤其是当报表具有不同的页面大小和/或方向时。

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

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

    另外,/demo/samples/tableofcontents sample 依赖于这种新型报告模板,我们称之为 book,它由部分而不是带组成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-10
      • 2010-09-18
      • 1970-01-01
      • 1970-01-01
      • 2017-10-14
      • 2020-06-22
      相关资源
      最近更新 更多