Having many separate - uncontrolled data sets in iReport

I am using iReport 2.0.4 to export some data to excel from a java application.

My problem is that my subgroups are grouped in a top-level report, but I want them to be discrete reports. Currently it looks like

Order
-Start line 1
Receipts -Receipt Line 1 -Getting line 2
Accounts -Invoice Line 1 -Invoice Line 2
Order
-Tool 2
Receipts -Receipt Line 1
........

I want this to be 3 separate reports in one table. Like this

Order all order lines
Receipts all reception lines
Invoices all invoice lines

Currently, I have Orders as the main report, and receipts and invoices as subscriptions that fall into the detailed list of orders.

What is the best way to get this layout, if at all possible?

+4
source share
2 answers

You can fill out and compile three separate reports, and then use the JRPdfExporterParameter.JASPER_PRINT_LIST parameter to create a single report using the following code:

JasperReport ordersReport = JasperCompileManager.compileReport(srcOrdersReport); JasperPrint jpOrdersReport = JasperFillManager.fillReport(ordersReport, ordersParamsMap, ordersDataSource); JasperReport receiptsReport = JasperCompileManager.compileReport(srcReceiptsReport); JasperPrint jpReceiptsReport = JasperFillManager.fillReport(receiptsReport, receiptsParamsMap, receiptsDataSource); JasperReport invoicesReport = JasperCompileManager.compileReport(srcInvoicesReport); JasperPrint jpInvoicesReport = JasperFillManager.fillReport(invoicesReport, invoicesParamsMap, invoicesDataSource); List<JasperPrint> printList = new ArrayList<JasperPrint>(); printList.add(jpOrdersReport); printList.add(receiptsReport); printList.add(invoicesReport); JRExporter exporter = new JRPdfExporter(); exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, printList); exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, output); exporter.exportReport(); 

You can see this sample for your JR version 2.0.4 for more details.

  • The second way. Using multiple datasets and list components

You can add multiple datasets to iReport 4.x in one report. Each data set may contain its own query. The list component can use its own dataset.

In this example (build with iReport 4.5.1), I placed a list in the header group 3:

 <?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="several_queries" language="groovy" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20"> <subDataset name="OrdersDataset"> <queryString> <![CDATA[SELECT TOP 5 ORDERID AS orderId, SHIPNAME AS orderShipName, SHIPCOUNTRY AS orderShipCounty, SHIPCITY AS orderShipCity FROM orders]]> </queryString> <field name="ORDERID" class="java.lang.Integer"/> <field name="ORDERSHIPNAME" class="java.lang.String"/> <field name="ORDERSHIPCOUNTY" class="java.lang.String"/> <field name="ORDERSHIPCITY" class="java.lang.String"/> </subDataset> <subDataset name="ReceiptsDataset"> <queryString> <![CDATA[SELECT TOP 10 ID AS receiptId, CITY AS receiptCity FROM receipts]]> </queryString> <field name="RECEIPTID" class="java.lang.Integer"/> <field name="RECEIPTCITY" class="java.lang.String"/> </subDataset> <subDataset name="InvoicesDataset"> <queryString> <![CDATA[SELECT TOP 7 ID AS invoiceId, TOTAL AS invoiceSum FROM invoices]]> </queryString> <field name="INVOICEID" class="java.lang.Integer"/> <field name="INVOICESUM" class="java.math.BigDecimal"/> </subDataset> <subDataset name="dataset1"/> <queryString> <![CDATA[SELECT 1 as t FROM dual WHERE 1=2]]> </queryString> <field name="t" class="java.lang.String"/> <background> <band splitType="Stretch"/> </background> <title> <band height="243" splitType="Stretch"> <componentElement> <reportElement positionType="Float" x="0" y="44" width="555" height="19"/> <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical"> <datasetRun subDataset="OrdersDataset"> <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> </datasetRun> <jr:listContents height="19" width="555"> <textField> <reportElement x="0" y="0" width="100" height="19"/> <box leftPadding="10" rightPadding="10"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement/> <textFieldExpression><![CDATA[$F{ORDERID}]]></textFieldExpression> </textField> <textField> <reportElement x="100" y="0" width="100" height="19"/> <box leftPadding="10" rightPadding="10"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement/> <textFieldExpression><![CDATA[$F{ORDERSHIPNAME}]]></textFieldExpression> </textField> <textField> <reportElement x="200" y="0" width="100" height="19"/> <box leftPadding="10" rightPadding="10"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement/> <textFieldExpression><![CDATA[$F{ORDERSHIPCOUNTY}]]></textFieldExpression> </textField> <textField> <reportElement x="300" y="0" width="100" height="19"/> <box leftPadding="10" rightPadding="10"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement/> <textFieldExpression><![CDATA[$F{ORDERSHIPCITY}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <componentElement> <reportElement positionType="Float" x="0" y="130" width="400" height="18"/> <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical"> <datasetRun subDataset="ReceiptsDataset"> <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> </datasetRun> <jr:listContents height="18" width="400"> <textField> <reportElement positionType="Float" x="100" y="0" width="100" height="18"/> <box leftPadding="10" rightPadding="10"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement/> <textFieldExpression><![CDATA[$F{RECEIPTCITY}]]></textFieldExpression> </textField> <textField> <reportElement positionType="Float" x="0" y="0" width="100" height="18"/> <box leftPadding="10" rightPadding="10"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement/> <textFieldExpression><![CDATA[$F{RECEIPTID}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <staticText> <reportElement positionType="Float" x="0" y="4" width="400" height="20"/> <box topPadding="1" leftPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isBold="true" isItalic="true"/> </textElement> <text><![CDATA[Orders]]></text> </staticText> <staticText> <reportElement x="0" y="24" width="100" height="20"/> <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isItalic="true"/> </textElement> <text><![CDATA[ID]]></text> </staticText> <staticText> <reportElement x="100" y="24" width="100" height="20"/> <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isItalic="true"/> </textElement> <text><![CDATA[Customer name]]></text> </staticText> <staticText> <reportElement x="200" y="24" width="100" height="20"/> <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isItalic="true"/> </textElement> <text><![CDATA[Customer country]]></text> </staticText> <staticText> <reportElement x="300" y="24" width="100" height="20"/> <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isItalic="true"/> </textElement> <text><![CDATA[Customer city]]></text> </staticText> <staticText> <reportElement positionType="Float" x="0" y="109" width="100" height="20"/> <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isItalic="true"/> </textElement> <text><![CDATA[ID]]></text> </staticText> <staticText> <reportElement positionType="Float" x="100" y="109" width="100" height="20"/> <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isItalic="true"/> </textElement> <text><![CDATA[City]]></text> </staticText> <staticText> <reportElement positionType="Float" x="0" y="89" width="200" height="20"/> <box topPadding="1" leftPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isBold="true" isItalic="true"/> </textElement> <text><![CDATA[Receipts]]></text> </staticText> <componentElement> <reportElement positionType="Float" x="0" y="201" width="400" height="18"/> <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd"> <datasetRun subDataset="InvoicesDataset"> <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression> </datasetRun> <jr:listContents height="18" width="400"> <textField pattern="###0.00;-###0.00"> <reportElement positionType="Float" x="100" y="0" width="100" height="18"/> <box leftPadding="10" rightPadding="10"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement/> <textFieldExpression><![CDATA[$F{INVOICESUM}]]></textFieldExpression> </textField> <textField> <reportElement positionType="Float" x="0" y="0" width="100" height="18"/> <box leftPadding="10" rightPadding="10"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement/> <textFieldExpression><![CDATA[$F{INVOICEID}]]></textFieldExpression> </textField> </jr:listContents> </jr:list> </componentElement> <staticText> <reportElement positionType="Float" x="0" y="161" width="200" height="20"/> <box topPadding="1" leftPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isBold="true" isItalic="true"/> </textElement> <text><![CDATA[Invoices]]></text> </staticText> <staticText> <reportElement positionType="Float" x="100" y="181" width="100" height="20"/> <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isItalic="true"/> </textElement> <text><![CDATA[Sum]]></text> </staticText> <staticText> <reportElement positionType="Float" x="0" y="181" width="100" height="20"/> <box topPadding="1" leftPadding="1" bottomPadding="1" rightPadding="1"> <topPen lineWidth="1.0"/> <leftPen lineWidth="1.0"/> <bottomPen lineWidth="1.0"/> <rightPen lineWidth="1.0"/> </box> <textElement textAlignment="Center"> <font isItalic="true"/> </textElement> <text><![CDATA[ID]]></text> </staticText> </band> </title> </jasperReport> 

Report Design:

The report's design in iReport

The result will be (via iReport preview):

The report's result

+7
source

In JasperReports 6.1.1, the JRPdfExporterParameter.JASPER_PRINT_LIST and JRPdfExporterParameter.OUTPUT_STREAM Deprecated I add in @Alex K responds to the current not deprecated method:

"The first way. Using the JasperReports API"

replace (outdated code):

 exporter.setParameter(JRPdfExporterParameter.JASPER_PRINT_LIST, printList); exporter.setParameter(JRPdfExporterParameter.OUTPUT_STREAM, output); 

from

 exporter.setExporterInput(SimpleExporterInput.getInstance(printList)); exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(output)); 
0
source

Source: https://habr.com/ru/post/921105/


All Articles