Jasper reports 除了最后一个迭代外,如何在细节中打印每个迭代的文本?
我有一个子报告,它迭代名称。我想在每个循环上打印一个文本“或”,除了最后一个循环。现在我正在做一个建议的解决方案,但它仍然会在最后一次迭代中打印出来 以下是我现在拥有的一个样本:Jasper reports 除了最后一个迭代外,如何在细节中打印每个迭代的文本?,jasper-reports,Jasper Reports,我有一个子报告,它迭代名称。我想在每个循环上打印一个文本“或”,除了最后一个循环。现在我正在做一个建议的解决方案,但它仍然会在最后一次迭代中打印出来 以下是我现在拥有的一个样本: <?xml version="1.0" encoding="UTF-8"?> <!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1 --> <ja
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="paiwi-signatories-name-only-subreport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8f474d5a-0cca-4c5f-807e-71af8848276f">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="signatoryJSON"/>
<queryString language="json">
<![CDATA[signatoryNames]]>
</queryString>
<field name="name" class="java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<field name="address" class="java.lang.String"/>
<variable name="signatoryCurrentCount" class="java.lang.Integer" resetType="None">
<variableExpression><![CDATA[$V{nameGroup_COUNT}]]></variableExpression>
</variable>
<group name="nameGroup">
<groupExpression><![CDATA[$F{name}]]></groupExpression>
</group>
<detail>
<band height="36" splitType="Stretch">
<textField isBlankWhenNull="true">
<reportElement positionType="Float" x="-20" y="-20" width="260" height="20" uuid="220a59b9-595b-4149-badd-f4a1ecff36c5"/>
<textElement>
<font fontName="Times New Roman" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField evaluationTime="Auto" isBlankWhenNull="true">
<reportElement positionType="Float" x="0" y="0" width="100" height="20" isRemoveLineWhenBlank="true" uuid="afda4fcc-78fc-46f9-8c5c-2e0c4f04dfa5"/>
<textFieldExpression><![CDATA[$V{signatoryCurrentCount}.equals($V{nameGroup_COUNT}) ? "or" : ""]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
子报表末尾仍有一个额外的或
我现在拥有的当前子报表源代码:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="paiwi-signatories-name-only-subreport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8f474d5a-0cca-4c5f-807e-71af8848276f">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="signatoryJSON"/>
<queryString language="json">
<![CDATA[signatoryNames]]>
</queryString>
<field name="name" class="java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<field name="address" class="java.lang.String"/>
<variable name="signatoryCurrentCount" class="java.lang.Integer" resetType="None">
<variableExpression><![CDATA[$V{nameGroup_COUNT}]]></variableExpression>
</variable>
<group name="nameGroup">
<groupExpression><![CDATA[$F{name}]]></groupExpression>
</group>
<detail>
<band height="36" splitType="Stretch">
<textField isBlankWhenNull="true">
<reportElement positionType="Float" x="-20" y="-20" width="260" height="20" uuid="220a59b9-595b-4149-badd-f4a1ecff36c5"/>
<textElement>
<font fontName="Times New Roman" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField evaluationTime="Auto" isBlankWhenNull="true">
<reportElement positionType="Float" x="0" y="0" width="100" height="20" isRemoveLineWhenBlank="true" uuid="afda4fcc-78fc-46f9-8c5c-2e0c4f04dfa5"/>
<textFieldExpression><![CDATA[$V{signatoryCurrentCount}.equals($V{nameGroup_COUNT}) ? "or" : ""]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
如何避免在最后一条记录之后打印最后一个文本字段?您可以尝试一件简单的事情,将这两个变量放入您的报告中,我想您已经知道您的报告将包含多少页,然后将
printweenpression
语句更改为页面的值,例如,您的报告包含20页,然后在变量中将打印条件更改为页码==20
和页码<20
。
祝你好运。如果你想利用
evalutationTime=“Auto”
变量将在其重置类型对应的时间进行评估
从
您需要两个具有不同重置时间的变量。根据您的示例,解决方案可以是:
将您的signatoryCurrentCount
设置为REPORT\u COUNT
,但每次组更改时都会重置(因此示例中的每条记录都会重置)
要理解重置类型为“Auto”的表达式,signatoryCurrentCount
将有1,2,3(在组中重置)和$V{REPORT\u COUNT}
始终是3(在报告中重置)
完整示例
jrxml
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="paiwi-signatories-name-only-subreport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8f474d5a-0cca-4c5f-807e-71af8848276f">
<queryString language="json">
<![CDATA[signatoryNames]]>
</queryString>
<field name="name" class="java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<field name="address" class="java.lang.String"/>
<variable name="signatoryCurrentCount" class="java.lang.Integer" resetType="Group" resetGroup="nameGroup">
<variableExpression><![CDATA[$V{REPORT_COUNT}]]></variableExpression>
</variable>
<group name="nameGroup">
<groupExpression><![CDATA[$F{name}]]></groupExpression>
</group>
<detail>
<band height="36" splitType="Stretch">
<textField isBlankWhenNull="true">
<reportElement positionType="Float" x="-20" y="-20" width="260" height="20" uuid="220a59b9-595b-4149-badd-f4a1ecff36c5"/>
<textElement>
<font fontName="Times New Roman" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField evaluationTime="Auto" isBlankWhenNull="true">
<reportElement positionType="Float" x="0" y="0" width="100" height="20" isRemoveLineWhenBlank="true" uuid="afda4fcc-78fc-46f9-8c5c-2e0c4f04dfa5"/>
<textFieldExpression><![CDATA[$V{signatoryCurrentCount}<$V{REPORT_COUNT} ? "or" : ""]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
输出
注意:使用evaluationTime=“Auto”对于jasper report来说是资源密集型的,在大多数情况下,我建议用户在数据源中传递记录总数,报告生成速度会更快
嗨@PetterFriberg,谢谢你一如既往的帮助。我也有同样的想法,就像我有两个选择一样,要么在JasperReport中使用一个可用的选项(这是evaluationTime,谢谢你给我这些信息),要么只传递数据源中的记录总数。我可以通过在Java程序中获取数组的长度来使用它。我会在一天之内告诉你这方面的最新情况
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="paiwi-signatories-name-only-subreport" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="8f474d5a-0cca-4c5f-807e-71af8848276f">
<queryString language="json">
<![CDATA[signatoryNames]]>
</queryString>
<field name="name" class="java.lang.String">
<fieldDescription><![CDATA[name]]></fieldDescription>
</field>
<field name="address" class="java.lang.String"/>
<variable name="signatoryCurrentCount" class="java.lang.Integer" resetType="Group" resetGroup="nameGroup">
<variableExpression><![CDATA[$V{REPORT_COUNT}]]></variableExpression>
</variable>
<group name="nameGroup">
<groupExpression><![CDATA[$F{name}]]></groupExpression>
</group>
<detail>
<band height="36" splitType="Stretch">
<textField isBlankWhenNull="true">
<reportElement positionType="Float" x="-20" y="-20" width="260" height="20" uuid="220a59b9-595b-4149-badd-f4a1ecff36c5"/>
<textElement>
<font fontName="Times New Roman" size="12"/>
</textElement>
<textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
</textField>
<textField evaluationTime="Auto" isBlankWhenNull="true">
<reportElement positionType="Float" x="0" y="0" width="100" height="20" isRemoveLineWhenBlank="true" uuid="afda4fcc-78fc-46f9-8c5c-2e0c4f04dfa5"/>
<textFieldExpression><![CDATA[$V{signatoryCurrentCount}<$V{REPORT_COUNT} ? "or" : ""]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>