gpt4 book ai didi

java - 如何在一份报告中打印带有条形码\或多个条形码的多份报告

转载 作者:行者123 更新时间:2023-12-04 05:31:43 24 4
gpt4 key购买 nike

我有一个条形码报告,它使用一个序列(Oracle 后端)来生成我的条形码编号。

这是我的查询:

SELECT to_char(PALLET_ID_NO_SEQ.nextval) FROM dual

我将此字段放置在将显示条形码值的设计器窗口中。

我有一个带有表情的图像:

new com.pepkorit.BarbecueRotateRenderer(
net.sourceforge.barbecue.BarcodeFactory.createCode128C(
$F{TO_CHAR(PALLET_ID_NO_SEQ.NEXTVAL)}), false, true, 1, 50, 190, 50)

以上是使用序列值的条形码。

我希望能够打印/生成 100 份或更多报告。目前,我一次只能生成一份报告。

所以我的第一个猜测是获取一个参数,提示用户一个值,该值将指示要打印的条形码数量,每个条形码都有一个单独的编号。

我不确定我关于解决这个问题的想法是否正确以及如何去做。

有人可以帮忙吗?

最佳答案

只需对查询进行少量修改即可轻松完成,而无需通过多种方式进行编程。

解决方案 1. 使用带条码组件的单个报告在详细信息带中

您可以使用单个报告的模板在 中生成多个条形码。一 报告。

在这种情况下,查询字符串 表达式(适用于 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 ):

The result via preview in iReport

在你的情况下 查询字符串 表达式将是这样的:

SELECT to_char(PALLET_ID_NO_SEQ.nextval) AS barcode, rownum FROM dual CONNECT BY LEVEL <= $P{quantity}

Barcode 组件的表达式为:

new com.pepkorit.BarbecueRotateRenderer(
net.sourceforge.barbecue.BarcodeFactory.createCode128C($F{barcode}),
false, true, 1, 50, 190, 50)

解决方案 2. 使用组头带

您可以使用相同的 查询字符串 表达式如第一个解决方案。群上 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>

万一 isStartNewPage="false"团体用 rownumGroup 结果将是( $P{quantity}== 7 ):

The result via preview in iReport, isStartNewPage="false"

万一 isStartNewPage="true"团体用 rownumGroup 结果将是( $P{quantity} == 5 ):

The result via preview in iReport, isStartNewPage="true"

解决方案 3. 使用子报表

我们可以将子报表组件添加到详细信息带(参见第一个解决方案)或组标题(参见第二个解决方案)带。在这种情况下,您不仅可以将 Barcode 组件添加到子报表中,还可以添加您想要的所有内容。

关于java - 如何在一份报告中打印带有条形码\或多个条形码的多份报告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12490881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com