Hallo allerseits,
ich versuche gerade mit JasperReport und iReport einen Report zu erstellen. Dabei nutze ich eine XML Datei als DataSource. Mein Problem ist nun folgendes:
Meine XML Datei entählt Bestellaufträge die untereinander aufgelistet werden sollen ( im pdf ). Jeder Bestellauftrag enthält mehrere Artikel.
Mein PDF sieht aktuell so aus
Auftrag 1
Artikel1
Artikel2
Artikel3
Auftrag 2
Artikel1
Artikel2
Artikel3
Das Problem ist jedoch, daß mein Auftrag 1, nur aus Artikel 1 und 2 besteht und mein Auftrag 2 nur aus Artikel 3.
Ich habe schon gesucht und glaube das mein problem beim übergeben des Paramters vom Master zum Subreport auftritt. Leider bin ich momentan ein wenig ratlos....
Mastertemplate
<?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="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:\\Dokumente und Einstellungen\\praksoft\\Eigene Dateien\\workspace_java\\reportSubTemplate\\template\\"]]></defaultValueExpression>
</parameter>
<parameter name="datasource" class="net.sf.jasperreports.engine.JRDataSource"/>
<field name="packstnumber" class="java.lang.String">
<fieldDescription><![CDATA[packstnumber]]></fieldDescription>
</field>
<field name="packstart" class="java.lang.String">
<fieldDescription><![CDATA[packstart]]></fieldDescription>
</field>
<field name="measure" class="java.lang.String">
<fieldDescription><![CDATA[measure]]></fieldDescription>
</field>
<field name="weight" class="java.lang.String">
<fieldDescription><![CDATA[weight]]></fieldDescription>
</field>
<background>
<band/>
</background>
<title>
<band height="143">
<image>
<reportElement x="325" y="0" width="230" height="70"/>
<imageExpression class="java.lang.String"><![CDATA["C:\\Dokumente und Einstellungen\\praksoft\\Eigene Dateien\\workspace_java\\reportTemplate\\header_left.jpg"]]></imageExpression>
</image>
<staticText>
<reportElement x="0" y="97" width="55" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Packst.-]]></text>
</staticText>
<staticText>
<reportElement x="0" y="110" width="30" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Nr.]]></text>
</staticText>
<staticText>
<reportElement x="55" y="97" width="55" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Packst.-]]></text>
</staticText>
<staticText>
<reportElement x="55" y="110" width="30" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Art]]></text>
</staticText>
<staticText>
<reportElement x="137" y="97" width="73" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Abmessung]]></text>
</staticText>
<staticText>
<reportElement x="137" y="110" width="41" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[in cm]]></text>
</staticText>
<staticText>
<reportElement x="237" y="100" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Gewicht]]></text>
</staticText>
<staticText>
<reportElement x="237" y="111" width="41" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[in kg]]></text>
</staticText>
<line>
<reportElement x="0" y="95" width="555" height="3"/>
</line>
<line>
<reportElement x="0" y="128" width="555" height="3"/>
</line>
<staticText>
<reportElement x="305" y="100" width="38" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Pos.]]></text>
</staticText>
<staticText>
<reportElement x="350" y="100" width="84" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Teilenummer /]]></text>
</staticText>
<staticText>
<reportElement x="350" y="112" width="84" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Bezeichnung]]></text>
</staticText>
<staticText>
<reportElement x="486" y="100" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Anzahl /]]></text>
</staticText>
<staticText>
<reportElement x="486" y="112" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Einheit]]></text>
</staticText>
</band>
</title>
<detail>
<band height="72">
<textField>
<reportElement x="0" y="0" width="55" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{packstnumber}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="55" y="0" width="55" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{packstart}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="137" y="0" width="73" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{measure}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="237" y="0" width="56" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{weight}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="305" y="0" width="250" height="42" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/>
<subreportParameter name="packstnumber">
<subreportParameterExpression><![CDATA[$F{packstnumber}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/list/orderarticle/article")]]></dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "reportSubTemplate.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band height="271">
</band>
</columnFooter>
</jasperReport>
Subreport
<?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="reportTemplate" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<reportFont name="Arial" isDefault="true" fontName="Arial" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1252" isPdfEmbedded="false"/>
<reportFont name="Courier" isDefault="false" fontName="Courier New" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1252" isPdfEmbedded="false"/>
<parameter name="packstnumber" class="java.lang.String"/>
<queryString language="xPath"><![CDATA[/list/orderarticle/article/[packstnumber = '$P{packstnumber}']]]></queryString>
<field name="position" class="java.lang.String">
<fieldDescription><![CDATA[position]]></fieldDescription>
</field>
<field name="description" class="java.lang.String">
<fieldDescription><![CDATA[description]]></fieldDescription>
</field>
<field name="value" class="java.lang.String">
<fieldDescription><![CDATA[value]]></fieldDescription>
</field>
<detail>
<band height="16">
<textField>
<reportElement x="0" y="1" width="37" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{position}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="47" y="0" width="101" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{description}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="181" y="0" width="55" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{value}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
XML
<?xml version='1.0' encoding='ISO-8859-1' ?>
<list>
<customer>
<firm>Rast und Ruh</firm>
<street>Hauptstraße 6</street>
<zip>71034</zip>
<city>Böblingen</city>
<phone>1234567</phone>
</customer>
<order>
<packst>
<packstnumber>1</packstnumber>
<packstart>EWP</packstart>
<measure>80 x 80 x 80</measure>
<weight>150</weight>
</packst>
<packst>
<packstnumber>2</packstnumber>
<packstart>EWP</packstart>
<measure>80 x 80 x 80</measure>
<weight>120</weight>
</packst>
</order>
<orderarticle>
<article>
<packstnumber>1</packstnumber>
<position>20</position>
<description>Winkel</description>
<value>20 St.</value>
</article>
<article>
<packstnumber>1</packstnumber>
<position>30</position>
<description>Rechteck</description>
<value>21 St.</value>
</article>
<article>
<packstnumber>2</packstnumber>
<position>40</position>
<description>Quadrat</description>
<value>22 St.</value>
</article>
</orderarticle>
</list>
JAVA Class
import java.io.File;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRXmlDataSource;
public class mySubTemplate {
public static void main(String[] args) {
JasperReport jasperReport;
JasperPrint jasperPrint;
HashMap<String, String> parameter = new HashMap<String, String>();
try {
JasperCompileManager.compileReportToFile("template/reportTemplate.jrxml","template/reportTemplate.jasper");
JasperCompileManager.compileReportToFile("template/reportSubTemplate.jrxml","template/reportSubTemplate.jasper");
}
catch (JRException ex) {
ex.printStackTrace();
}
try {
JRXmlDataSource xml = new JRXmlDataSource(new File("data/testData.xml"), "/list/order/packst");
jasperReport = JasperCompileManager.compileReport("template/reportTemplate.jrxml");
jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, xml);
// pdf output
JasperExportManager.exportReportToPdfFile(jasperPrint, "output_sub.pdf");
}
catch (JRException e) {
e.printStackTrace();
}
}
}
ich versuche gerade mit JasperReport und iReport einen Report zu erstellen. Dabei nutze ich eine XML Datei als DataSource. Mein Problem ist nun folgendes:
Meine XML Datei entählt Bestellaufträge die untereinander aufgelistet werden sollen ( im pdf ). Jeder Bestellauftrag enthält mehrere Artikel.
Mein PDF sieht aktuell so aus
Auftrag 1
Artikel1
Artikel2
Artikel3
Auftrag 2
Artikel1
Artikel2
Artikel3
Das Problem ist jedoch, daß mein Auftrag 1, nur aus Artikel 1 und 2 besteht und mein Auftrag 2 nur aus Artikel 3.
Ich habe schon gesucht und glaube das mein problem beim übergeben des Paramters vom Master zum Subreport auftritt. Leider bin ich momentan ein wenig ratlos....
Mastertemplate
<?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="report name" pageWidth="595" pageHeight="842" columnWidth="535" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<parameter name="SUBREPORT_DIR" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["C:\\Dokumente und Einstellungen\\praksoft\\Eigene Dateien\\workspace_java\\reportSubTemplate\\template\\"]]></defaultValueExpression>
</parameter>
<parameter name="datasource" class="net.sf.jasperreports.engine.JRDataSource"/>
<field name="packstnumber" class="java.lang.String">
<fieldDescription><![CDATA[packstnumber]]></fieldDescription>
</field>
<field name="packstart" class="java.lang.String">
<fieldDescription><![CDATA[packstart]]></fieldDescription>
</field>
<field name="measure" class="java.lang.String">
<fieldDescription><![CDATA[measure]]></fieldDescription>
</field>
<field name="weight" class="java.lang.String">
<fieldDescription><![CDATA[weight]]></fieldDescription>
</field>
<background>
<band/>
</background>
<title>
<band height="143">
<image>
<reportElement x="325" y="0" width="230" height="70"/>
<imageExpression class="java.lang.String"><![CDATA["C:\\Dokumente und Einstellungen\\praksoft\\Eigene Dateien\\workspace_java\\reportTemplate\\header_left.jpg"]]></imageExpression>
</image>
<staticText>
<reportElement x="0" y="97" width="55" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Packst.-]]></text>
</staticText>
<staticText>
<reportElement x="0" y="110" width="30" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Nr.]]></text>
</staticText>
<staticText>
<reportElement x="55" y="97" width="55" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Packst.-]]></text>
</staticText>
<staticText>
<reportElement x="55" y="110" width="30" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Art]]></text>
</staticText>
<staticText>
<reportElement x="137" y="97" width="73" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Abmessung]]></text>
</staticText>
<staticText>
<reportElement x="137" y="110" width="41" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[in cm]]></text>
</staticText>
<staticText>
<reportElement x="237" y="100" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Gewicht]]></text>
</staticText>
<staticText>
<reportElement x="237" y="111" width="41" height="14"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[in kg]]></text>
</staticText>
<line>
<reportElement x="0" y="95" width="555" height="3"/>
</line>
<line>
<reportElement x="0" y="128" width="555" height="3"/>
</line>
<staticText>
<reportElement x="305" y="100" width="38" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Pos.]]></text>
</staticText>
<staticText>
<reportElement x="350" y="100" width="84" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Teilenummer /]]></text>
</staticText>
<staticText>
<reportElement x="350" y="112" width="84" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Bezeichnung]]></text>
</staticText>
<staticText>
<reportElement x="486" y="100" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Anzahl /]]></text>
</staticText>
<staticText>
<reportElement x="486" y="112" width="56" height="17"/>
<textElement>
<font fontName="Arial" size="12" isBold="true"/>
</textElement>
<text><![CDATA[Einheit]]></text>
</staticText>
</band>
</title>
<detail>
<band height="72">
<textField>
<reportElement x="0" y="0" width="55" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{packstnumber}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="55" y="0" width="55" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{packstart}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="137" y="0" width="73" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{measure}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="237" y="0" width="56" height="25"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{weight}]]></textFieldExpression>
</textField>
<subreport>
<reportElement x="305" y="0" width="250" height="42" isRemoveLineWhenBlank="true" isPrintWhenDetailOverflows="true"/>
<subreportParameter name="packstnumber">
<subreportParameterExpression><![CDATA[$F{packstnumber}]]></subreportParameterExpression>
</subreportParameter>
<dataSourceExpression><![CDATA[((net.sf.jasperreports.engine.data.JRXmlDataSource)$P{REPORT_DATA_SOURCE}).dataSource("/list/orderarticle/article")]]></dataSourceExpression>
<subreportExpression class="java.lang.String"><![CDATA[$P{SUBREPORT_DIR} + "reportSubTemplate.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
<columnFooter>
<band height="271">
</band>
</columnFooter>
</jasperReport>
Subreport
<?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="reportTemplate" pageWidth="595" pageHeight="842" columnWidth="595" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0">
<reportFont name="Arial" isDefault="true" fontName="Arial" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1252" isPdfEmbedded="false"/>
<reportFont name="Courier" isDefault="false" fontName="Courier New" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1252" isPdfEmbedded="false"/>
<parameter name="packstnumber" class="java.lang.String"/>
<queryString language="xPath"><![CDATA[/list/orderarticle/article/[packstnumber = '$P{packstnumber}']]]></queryString>
<field name="position" class="java.lang.String">
<fieldDescription><![CDATA[position]]></fieldDescription>
</field>
<field name="description" class="java.lang.String">
<fieldDescription><![CDATA[description]]></fieldDescription>
</field>
<field name="value" class="java.lang.String">
<fieldDescription><![CDATA[value]]></fieldDescription>
</field>
<detail>
<band height="16">
<textField>
<reportElement x="0" y="1" width="37" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{position}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="47" y="0" width="101" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{description}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="181" y="0" width="55" height="15"/>
<textElement>
<font size="12"/>
</textElement>
<textFieldExpression class="java.lang.String"><![CDATA[$F{value}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
XML
<?xml version='1.0' encoding='ISO-8859-1' ?>
<list>
<customer>
<firm>Rast und Ruh</firm>
<street>Hauptstraße 6</street>
<zip>71034</zip>
<city>Böblingen</city>
<phone>1234567</phone>
</customer>
<order>
<packst>
<packstnumber>1</packstnumber>
<packstart>EWP</packstart>
<measure>80 x 80 x 80</measure>
<weight>150</weight>
</packst>
<packst>
<packstnumber>2</packstnumber>
<packstart>EWP</packstart>
<measure>80 x 80 x 80</measure>
<weight>120</weight>
</packst>
</order>
<orderarticle>
<article>
<packstnumber>1</packstnumber>
<position>20</position>
<description>Winkel</description>
<value>20 St.</value>
</article>
<article>
<packstnumber>1</packstnumber>
<position>30</position>
<description>Rechteck</description>
<value>21 St.</value>
</article>
<article>
<packstnumber>2</packstnumber>
<position>40</position>
<description>Quadrat</description>
<value>22 St.</value>
</article>
</orderarticle>
</list>
JAVA Class
import java.io.File;
import java.util.HashMap;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRXmlDataSource;
public class mySubTemplate {
public static void main(String[] args) {
JasperReport jasperReport;
JasperPrint jasperPrint;
HashMap<String, String> parameter = new HashMap<String, String>();
try {
JasperCompileManager.compileReportToFile("template/reportTemplate.jrxml","template/reportTemplate.jasper");
JasperCompileManager.compileReportToFile("template/reportSubTemplate.jrxml","template/reportSubTemplate.jasper");
}
catch (JRException ex) {
ex.printStackTrace();
}
try {
JRXmlDataSource xml = new JRXmlDataSource(new File("data/testData.xml"), "/list/order/packst");
jasperReport = JasperCompileManager.compileReport("template/reportTemplate.jrxml");
jasperPrint = JasperFillManager.fillReport(jasperReport, parameter, xml);
// pdf output
JasperExportManager.exportReportToPdfFile(jasperPrint, "output_sub.pdf");
}
catch (JRException e) {
e.printStackTrace();
}
}
}