Det kan nemt gøres med små ændringer af din forespørgsel uden programmering på flere måder.
Løsning 1. Brug af enkelt rapport med stregkodekomponent i detaljebåndet
Du kan bruge en enkelt rapports skabelon til at generere flere stregkoder i én rapport.
I dette tilfælde queryString udtryk (virker for Oracle DB) bliver sådan her:
SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
- det genererer en værdi fra sekvensen så mange gange som du har brug for. $P{quantity} parameter bestemmer antallet af rækker (stregkoder), der skal genereres.
Den fungerende rjxml fil:
<jasperReport ...>
<parameter name="quantity" class="java.lang.Integer">
<defaultValueExpression><![CDATA[20]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}]]>
</queryString>
<field name="BARCODE" class="java.lang.Integer"/>
<field name="ROWNUM" class="java.lang.Integer"/>
<title>
<band height="82" splitType="Stretch">
<textField>
<reportElement x="145" y="18" width="240" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["The number of barcodes is: " + $P{quantity}]]></textFieldExpression>
</textField>
</band>
</title>
<detail>
<band height="47" splitType="Stretch">
<componentElement>
<reportElement x="145" y="10" width="200" height="28"/>
<jr:barbecue xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" type="2of7" drawText="false" checksumRequired="false">
<jr:codeExpression><![CDATA[$F{BARCODE}]]></jr:codeExpression>
</jr:barbecue>
</componentElement>
</band>
</detail>
</jasperReport>
Resultatet bliver ($P{quantity} ==5 ):
I dit tilfælde queryString udtryk vil være sådan her:
SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
og udtrykket stregkode komponent vil være:
new com.pepkorit.BarbecueRotateRenderer(
net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
false, true, 1, 50, 190, 50)
Løsning 2. Brug af gruppehovedbånd
Du kan bruge den samme queryString udtryk som i den første løsning. Gruppen på rownum feltet vil hjælpe os med at generere single rapport med mange stregkoder, der tilhører sin egen gruppe (en gruppe - en stregkode). Stregkoden komponent skal placeres i Gruppehovedet band.
Brug af isStartNewPage egenskab vi kan klare at generere gruppe på ny side eller ej.
rjxml fil:
<jasperReport ...>
<parameter name="quantity" class="java.lang.Integer">
<defaultValueExpression><![CDATA[20]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}]]>
</queryString>
<field name="BARCODE" class="java.lang.Integer"/>
<field name="ROWNUM" class="java.lang.Integer"/>
<group name="rownumGroup" isStartNewPage="true">
<groupExpression><![CDATA[$F{ROWNUM}]]></groupExpression>
<groupHeader>
<band height="50">
<componentElement>
<reportElement x="145" y="11" width="200" height="28"/>
<jr:barbecue xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" type="2of7" drawText="false" checksumRequired="false">
<jr:codeExpression><![CDATA[$F{BARCODE}]]></jr:codeExpression>
</jr:barbecue>
</componentElement>
</band>
</groupHeader>
</group>
<title>
<band height="82" splitType="Stretch">
<textField>
<reportElement x="145" y="18" width="240" height="20"/>
<textElement/>
<textFieldExpression><![CDATA["The number of barcodes is: " + $P{quantity}]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
I tilfælde af isStartNewPage="false" for gruppe rownumGroup resultatet bliver ($P{quantity}==7 ):
I tilfælde af isStartNewPage="true" for gruppe rownumGroup resultatet bliver ($P{quantity} ==5 ):
Løsning 3. Brug af underrapport
Vi kan tilføje Underrapport komponent til Detaljer bånd (se første løsning ) eller Gruppeoverskrift (se anden løsning ) band. I dette tilfælde kan du ikke kun tilføje stregkoden til underrapporten komponent, men alt hvad du ønsker.