Det kan enkelt göras med små modifieringar av din fråga utan programmering på flera sätt.
Lösning 1. Använd en enda rapport med streckkodskomponent i detaljbandet
Du kan använda en rapportmall för att generera flera streckkoder i en rapportera.
I det här fallet queryString expression (fungerar för Oracle DB) blir så här:
SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
- det genererar ett värde från sekvensen så många gånger du behöver. $P{quantity} parametern bestämmer antalet rader (streckkoder) som ska genereras.
Den fungerande 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 blir ($P{quantity} ==5 ):
I ditt fall queryString uttrycket blir så här:
SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
och uttrycket Streckkod komponent kommer att vara:
new com.pepkorit.BarbecueRotateRenderer(
net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
false, true, 1, 50, 190, 50)
Lösning 2. Använda grupphuvudband
Du kan använda samma queryString uttryck som i den första lösningen. Gruppen på rownum fältet hjälper oss att skapa single rapport med många streckkoder som tillhör sin egen grupp (en grupp - en streckkod). Streckkoden komponenten ska placeras i Grupprubrik band.
Använda isStartNewPage egendom vi kan lyckas skapa grupp på ny sida eller inte.
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 fallet isStartNewPage="false" för gruppen rownumGroup resultatet blir ($P{quantity}==7 ):
I fallet isStartNewPage="true" för gruppen rownumGroup resultatet blir ($P{quantity} ==5 ):
Lösning 3. Använder underrapport
Vi kan lägga till Underrapport komponenten till Detalj band (se första lösningen ) eller Grupprubrik (se den andra lösningen ) band. I det här fallet kan du inte bara lägga till streckkoden i underrapporten komponent, men allt du vill ha.