Може лесно да се направи с малка модификация на вашата заявка без програмиране по няколко начина.
Решение 1. Използване на единичен отчет с компонент Баркод в детайлна лента
Можете да използвате един шаблон на отчет за генериране на няколко баркода в един доклад.
В този случай queryString израз (работи за Oracle DB) ще бъде така:
SELECT seq_barcode.nextval AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
- генерира стойност от последователността толкова пъти, колкото е необходимо. $P{количество параметърът определя броя на редовете (баркодовете), които да бъдат генерирани.
Работният rjxml файл:
<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>
Резултатът ще бъде ($P{quantity} ==5 ):
Във вашия случай queryString изразът ще бъде така:
SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}
и изразът на Баркод компонент ще бъде:
new com.pepkorit.BarbecueRotateRenderer(
net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
false, true, 1, 50, 190, 50)
Решение 2. Използване на група за заглавка на група
Можете да използвате същия queryString израз както в първото решение. Групата наrownum поле ще ни помогне да генерираме единични отчет с много баркодове, принадлежащи към собствена група (една група - един баркод). Баркодът компонентът трябва да се постави в Заглавката на групата лента.
Използване на isStartNewPage свойство, което можем да управляваме да генерираме група на нова страница или не.
rjxml файл:
<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>
В случай, чее StartNewPage="false" за групаrownumGroup резултатът ще бъде ($P{quantity}==7 ):
В случай, чее StartNewPage="true" за групаrownumGroup резултатът ще бъде ($P{quantity} ==5 ):
Решение 3. Използване на подотчет
Можем да добавим Поддоклад компонент към Подробности лента (вижте първото решение ) или Заглавка на групата (вижте второто решение ) банда. В този случай можете да добавите към подотчета не само Баркод компонент, но всичко, което искате.