Può essere fatto facilmente con piccole modifiche alla tua query senza programmare in diversi modi.
Soluzione 1. Utilizzo di report singolo con componente Codice a barre nella banda Dettagli
Puoi utilizzare il modello di rapporto singolo per generare più codici a barre in uno rapporto.
In questo caso la queryString espressione (funziona per Oracle DB) sarà così:
SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
- genera un valore dalla sequenza tutte le volte che vuoi. Il $P{quantità} parametro determina il numero di righe (codici a barre) da generare.
Il lavoro rjxml file:
<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>
Il risultato sarà ($P{quantità} ==5 ):
Nel tuo caso la queryString l'espressione sarà così:
SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
e l'espressione di Codice a barre il componente sarà:
new com.pepkorit.BarbecueRotateRenderer(
net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
false, true, 1, 50, 190, 50)
Soluzione 2. Utilizzo della banda di intestazione del gruppo
Puoi utilizzare la stessa queryString espressione come nella prima soluzione. Il gruppo su rownum campo ci aiuterà a generare single report con più codici a barre appartenenti al proprio gruppo (un gruppo - un codice a barre). Il codice a barre il componente deve essere posizionato nell'intestazione del gruppo fascia.
Utilizzando isStartNewPage proprietà che possiamo gestire per generare un gruppo su una nuova pagina o meno.
Il rjxml file:
<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>
Nel caso isStartNewPage="false" per il gruppo rownumGroup il risultato sarà ($P{quantity}==7 ):
Nel caso isStartNewPage="true" per il gruppo rownumGroup il risultato sarà ($P{quantità} ==5 ):
Soluzione 3. Utilizzo del sottoreport
Possiamo aggiungere Sottoreport componente al Dettaglio banda (vedi prima soluzione ) o Intestazione gruppo (vedi seconda soluzione ) gruppo musicale. In questo caso puoi aggiungere al sottoreport non solo il Codice a barre componente, ma tutto quello che vuoi.