1

假设我想在第 2 页打印图像。

如果第 1 页内容很多,第 1 页内容将拆分为第 1 页和第 3 页,

而第 2 页仍然是该图像。

可以在pdf生成中完成吗?

提前致谢。

4

1 回答 1

3

是的,您可以使用图像元素的printWhenExpression属性。

工作示例 - 我添加条件以仅在第二页上显示图像。我在iReport中的报表设计是: iReport 中的报表设计

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="image_expression" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <queryString>
        <![CDATA[select id from address]]>
    </queryString>
    <field name="ID" class="java.lang.Integer"/>
    <title>
        <band height="47" splitType="Stretch">
            <image scaleImage="RetainShape">
                <reportElement x="247" y="0" width="32" height="33"/>
                <imageExpression><![CDATA["Number1.png"]]></imageExpression>
            </image>
            <staticText>
                <reportElement x="147" y="13" width="100" height="20"/>
                <textElement textAlignment="Center">
                    <font isBold="true" isItalic="true"/>
                </textElement>
                <text><![CDATA[Title]]></text>
            </staticText>
        </band>
    </title>
    <detail>
        <band height="35" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="59" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
            </textField>
            <image scaleImage="RetainShape">
                <reportElement x="59" y="0" width="32" height="33">
                    <printWhenExpression><![CDATA[$V{PAGE_NUMBER}==2]]></printWhenExpression>
                </reportElement>
                <imageExpression><![CDATA["Number2.png"]]></imageExpression>
            </image>
        </band>
    </detail>
    <pageFooter>
        <band height="34">
            <image scaleImage="RetainShape">
                <reportElement x="523" y="1" width="32" height="33">
                    <printWhenExpression><![CDATA[$V{PAGE_NUMBER}==2]]></printWhenExpression>
                </reportElement>
                <imageExpression><![CDATA["Number3.png"]]></imageExpression>
            </image>
            <textField>
                <reportElement x="44" y="14" width="80" height="20"/>
                <textElement textAlignment="Right"/>
                <textFieldExpression><![CDATA["Page "+$V{PAGE_NUMBER}+" of"]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Report">
                <reportElement x="124" y="14" width="40" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[" " + $V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
        </band>
    </pageFooter>
</jasperReport>

结果将是(通过iReport中的预览功能),报告的第一页将是: 第一页

第二页:

第二页

最后第三页:

第三页

更新:

您可以在页面上添加用于计算行数的变量,并在printWhenExpression中使用此变量。

例如,如果我只想在第三行的第二页上显示图像,我的模板将如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ...>
    ...
    <variable name="rowAtPage" class="java.lang.Integer" resetType="Page">
        <variableExpression><![CDATA[$V{rowAtPage} + 1]]></variableExpression>
        <initialValueExpression><![CDATA[0]]></initialValueExpression>
    </variable>
    ...
    <detail>
        <band height="35" splitType="Stretch">
            <textField>
                <reportElement x="0" y="0" width="59" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression>
            </textField>
            <image scaleImage="RetainShape">
                <reportElement x="59" y="0" width="32" height="33">
                    <printWhenExpression><![CDATA[$V{PAGE_NUMBER} == 2 && $V{rowAtPage} == 3]]></printWhenExpression>
                </reportElement>
                <imageExpression><![CDATA["Number2.png"]]></imageExpression>
            </image>
        </band>
    </detail>
    ...
</jasperReport>

结果将是:

第二页,只显示一行的图片

于 2012-06-08T07:09:27.573 回答