如何合并两个已经运行的报告?
How to combine two already functioning reports?
我对子报表做了一些研究,甚至构建了使用多个子报表的报表。
我在合并 2 个已经制作的报告时遇到了问题,以便它们都 运行 并打印出来(第一页上有一个, 一个在第二页).
我该怎么做?
我是否必须在这些报告 SQL 语句中包含每个项目,或者只包含导致输入的参数?
我正在使用 iReport 构建我的自定义 jasper 报告,
你有 2 个选择
1.合并报告创建一个主报告,并将您的报告作为子报告包含在其中。您需要将边距设置为 0,whenNoDataType="AllSectionsNoDetail"
,例如使用 summary
带为 report2 设置 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();
现在有第三种方法来连接它们,特别是当报告有 不同的页面大小 and/or 方向时。
您可以 运行 将它们 运行 作为读书报告的一部分,而不是 运行 在主报告中将它们作为子报告。
请检查 JR Lib project distro 包内的 /demo/samples/book 示例,您可以看到 3 个不同布局的报告如何 运行 一起生成一个文件输出。
此外,/demo/samples/tableofcontents sample 依赖于这种新型报告模板,我们称之为书本,它由零件而不是带组成。
我对子报表做了一些研究,甚至构建了使用多个子报表的报表。
我在合并 2 个已经制作的报告时遇到了问题,以便它们都 运行 并打印出来(第一页上有一个, 一个在第二页).
我该怎么做? 我是否必须在这些报告 SQL 语句中包含每个项目,或者只包含导致输入的参数?
我正在使用 iReport 构建我的自定义 jasper 报告,
你有 2 个选择
1.合并报告创建一个主报告,并将您的报告作为子报告包含在其中。您需要将边距设置为 0,whenNoDataType="AllSectionsNoDetail"
,例如使用 summary
带为 report2 设置 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();
现在有第三种方法来连接它们,特别是当报告有 不同的页面大小 and/or 方向时。
您可以 运行 将它们 运行 作为读书报告的一部分,而不是 运行 在主报告中将它们作为子报告。
请检查 JR Lib project distro 包内的 /demo/samples/book 示例,您可以看到 3 个不同布局的报告如何 运行 一起生成一个文件输出。
此外,/demo/samples/tableofcontents sample 依赖于这种新型报告模板,我们称之为书本,它由零件而不是带组成。