只需对查询进行少量修改即可轻松完成,而无需通过几种方式进行编程。
解决方案1.将单个报告与明细栏中的条形码组件一起使用
您可以使用单个报告的模板在 一个 报告中生成多个条形码。
在这种情况下, queryString 表达式(适用于 Oracle DB)将如下所示:
SELECt seq_barpre.nextval AS barpre, rownum FROM dual ConNECT BY LEVEL <= $P{quantity}-它会根据需要多次从序列中生成一个值。的 $ P {量} 参数确定要生成的行(条形码)的数量。
工作的 rjxml 文件:
<jasperReport ...> <parameter name="quantity" > <defaultValueexpression><![CDATA[20]]></defaultValueexpression> </parameter> <queryString> <![CDATA[SELECt seq_barpre.nextval AS barpre, rownum FROM dual ConNECT BY LEVEL <= $P{quantity}]]> </queryString> <field name="BARCODE" /> <field name="ROWNUM" /> <title> <band height="82" splitType="Stretch"> <textField> <reportElement x="145" y="18" width="240" height="20"/> <textElement/> <textFieldexpression><![CDATA["The number of barpres 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:preexpression><![CDATA[$F{BARCODE}]]></jr:preexpression> </jr:barbecue> </componentElement> </band> </detail></jasperReport>结果将是( $ P {quantity} == 5 ):
在您的情况下, queryString 表达式将如下所示:
SELECt to_char(PALLET_ID_NO_SEQ.nextval) AS barpre, rownum FROM dual ConNECT BY LEVEL <= $P{quantity}条形码 组件的表达式为:
new com.pepkorit.BarbecueRotateRenderer( net.sourceforge.barbecue.BarpreFactory.createCode128C($F{barpre}), false, true, 1, 50, 190, 50)解决方案2.使用组头带
您可以使用与第一个解决方案相同的 queryString 表达式。 rownum 上的group 字段将帮助我们生成
单个 报告,其中包含多个属于其自身组的条形码(一组-一个条形码)。所述 条形码 组分应放置到 组页眉 带。
使用 isStartNewPage 属性,我们可以管理是否在新页面上生成组。
该 rjxml 文件:
<jasperReport ...> <parameter name="quantity" > <defaultValueexpression><![CDATA[20]]></defaultValueexpression> </parameter> <queryString> <![CDATA[SELECt seq_barpre.nextval AS barpre, rownum FROM dual ConNECT BY LEVEL <= $P{quantity}]]> </queryString> <field name="BARCODE" /> <field name="ROWNUM" /> <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:preexpression><![CDATA[$F{BARCODE}]]></jr:preexpression> </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 barpres is: " + $P{quantity}]]></textFieldexpression> </textField> </band> </title></jasperReport>如果对于 rownumGroup* 组为 isStartNewPage =“ false” ,则结果为( $ P
{quantity} == 7 ): __*
如果对于 rownumGroup* 组为 isStartNewPage =“ true” ,则结果为( $ P
{quantity} == 5 ): __*
解决方案3.使用子报表
我们可以将 Subreport 组件添加到 Detail区域 ( 请参阅第一个解决方案 )或 Group Header (
请参阅第二个解决方案 )区域。在这种情况下,您不仅可以将 条形码 组件添加到子报表中,还可以添加所需的所有内容。



