如何检查每行的第一行?

时间:2016-12-18 10:30:18

标签: jasper-reports

我有要打印的数据列表。我想知道是否有任何方法可以找到该行是否是每个页面的JasperReports报告中的第一行?

2 个答案:

答案 0 :(得分:1)

内置变量名称$V{PAGE_COUNT}

  

PAGE_COUNT - 内置变量,包含生成当前页面时处理的记录数。

对于页面上的第一条记录,此变量从1开始计数到页面末尾,当创建新页面时,它将重置为1。

这意味着页面上的第一条记录将包含此变量==1,例如,如果您想在第一行添加内容,则可以使用printWhenExpression

<printWhenExpression><![CDATA[$V{PAGE_COUNT}.intValue()==1]]></printWhenExpression>

答案 1 :(得分:0)

除了使用 JasperReports 引擎内置变量PAGE_COUNT之外,还可以通过多种方式解决此任务。

使用变量

我们可以使用resetType="Page"创建变量来计算页面的行数。

<variable name="counterOnPage" class="java.lang.Integer" resetType="Page" calculation="Sum">
    <variableExpression><![CDATA[1]]></variableExpression>
    <initialValueExpression><![CDATA[0]]></initialValueExpression>
</variable>

数据源

简单的csv数据源对样本很有用。

First page. Row 1
First page. Row 2
First page. Row 3
First page. Row 4
First page. Row 5
Second page. Row 1
Second page. Row 2
Second page. Row 3
Second page. Row 4
Second page. Row 5
Third page. Row 1
Third page. Row 2
Third page. Row 3
Third page. Row 4
Third page. Row 5

以下示例中此数据源的数据适配器名称为 rows.csv 。字段的名称是 name

示例报告模板

报告的高度足以显示每页5行。

<?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="Using variable" pageWidth="250" pageHeight="75" whenNoDataType="AllSectionsNoDetail" columnWidth="210" leftMargin="20" rightMargin="20" topMargin="0" bottomMargin="0">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="rows.csv"/>
    <field name="name" class="java.lang.String"/>
    <variable name="counterOnPage" class="java.lang.Integer" resetType="Page" calculation="Sum">
        <variableExpression><![CDATA[1]]></variableExpression>
        <initialValueExpression><![CDATA[0]]></initialValueExpression>
    </variable>
    <detail>
        <band height="15">
            <textField>
                <reportElement x="0" y="0" width="180" height="15" uuid="1b535a7e-7a8e-4e44-91ff-c0b8415afcf1"/>
                <textFieldExpression><![CDATA[($V{counterOnPage} == 1) ? $F{name} + "!" : $F{name}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

对于第一行,我们将添加符号&#34;!&#34;到一个字符串的末尾。

输出结果

结果( pdf 文件)将是:

The generated pdf with help of JSS

使用报告的参数图

这是一个使用参数图($P{REPORT_PARAMETERS_MAP})的小黑客。

我们可以设置一些&#34; flag&#34; (而不是使用变量)标记页面的第一行。例如,我们可以将 textField 放在 pageHeader 中,以便在报告的地图中设置值 isFirst

<textField>
    <reportElement x="0" y="0" width="100" height="1"/>
    <textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.put("isFirst", true)]]></textFieldExpression>
</textField>

- 我们正在初始化旗帜的价值。

我们应该添加 isFirst 值的检查,并在首次使用后更改此标志的值。假的 textField 将完成这项工作

<textField>
    <reportElement x="180" y="0" width="0" height="15"/>
    <textFieldExpression><![CDATA[((Boolean) $P{REPORT_PARAMETERS_MAP}.put("isFirst", false)) ? "" : ""]]></textFieldExpression>
</textField>

- 我们正在重置旗帜的价值。

示例报告模板

数据源将是相同的。

<?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="Using Map" pageWidth="250" pageHeight="76" whenNoDataType="AllSectionsNoDetail" columnWidth="210" leftMargin="20" rightMargin="20" topMargin="0" bottomMargin="0">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="rows.csv"/>
    <field name="name" class="java.lang.String"/>
    <pageHeader>
        <band height="1">
            <textField>
                <reportElement x="0" y="0" width="100" height="1"/>
                <textFieldExpression><![CDATA[$P{REPORT_PARAMETERS_MAP}.put("isFirst", true)]]></textFieldExpression>
            </textField>
        </band>
    </pageHeader>
    <detail>
        <band height="15">
            <textField>
                <reportElement x="0" y="0" width="180" height="15">
                </reportElement>
                <textFieldExpression><![CDATA[($P{REPORT_PARAMETERS_MAP}.get("isFirst") != null && ((Boolean) $P{REPORT_PARAMETERS_MAP}.get("isFirst")) == true) ? "! " + $F{name} + "!" : $F{name}]]></textFieldExpression>
            </textField>
            <textField>
                <reportElement x="180" y="0" width="0" height="15"/>
                <textFieldExpression><![CDATA[((Boolean) $P{REPORT_PARAMETERS_MAP}.put("isFirst", false)) ? "" : ""]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

对于第一行,我们将添加符号&#34;!&#34;到字符串的开头和结尾。

输出结果

结果( pdf 文件)将是:

The generated pdf with help of JSS