Można to łatwo zrobić, modyfikując zapytanie bez konieczności programowania na kilka sposobów.
Rozwiązanie 1. Używanie pojedynczego raportu z komponentem Barcode w paśmie szczegółów
Możesz użyć szablonu pojedynczego raportu do wygenerowania kilku kodów kreskowych w jednym raport.
W tym przypadku queryString wyrażenie (działa dla Oracle DB) będzie tak:
SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
- generuje wartość z sekwencji tyle razy, ile potrzebujesz. $P{ilość} parametr określa liczbę wierszy (kodów kreskowych) do wygenerowania.
Działający rjxml plik:
<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>
Wynik będzie następujący ($P{ilość} ==5 ):
W Twoim przypadku queryString wyrażenie będzie takie:
SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
i wyrażenie Kod kreskowy komponentem będzie:
new com.pepkorit.BarbecueRotateRenderer(
net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
false, true, 1, 50, 190, 50)
Rozwiązanie 2. Korzystanie z nagłówka grupy
Możesz użyć tego samego ciągu zapytania wyrażenie jak w pierwszym rozwiązaniu. Grupa na rownum pole pomoże nam wygenerować pojedynczy raport z wieloma kodami kreskowymi należącymi do własnej grupy (jedna grupa - jeden kod kreskowy). Kod kreskowy komponent należy umieścić w nagłówku grupy zespół.
Korzystanie ze strony isStartNewPage właściwość, którą możemy zarządzać, aby wygenerować grupę na nowej stronie lub nie.
rjxml plik:
<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>
W przypadku isStartNewPage="false" dla grupy rownumGroup wynik będzie następujący ($P{ilość}==7 ):
W przypadku isStartNewPage="true" dla grupy rownumGroup wynik będzie następujący ($P{ilość} ==5 ):
Rozwiązanie 3. Korzystanie z podraportu
Możemy dodać Podraport komponent Szczegóły zespół (zobacz pierwsze rozwiązanie ) lub Nagłówek grupy (zobacz drugie rozwiązanie ) grupa. W takim przypadku możesz dodać do podraportu nie tylko Kod kreskowy komponent, ale wszystko, co chcesz.