当前位置: 首页 > 知识库问答 >
问题:

Jasper报告:子报告中的页码不起作用

岳鸿畴
2023-03-14

我的应用程序中有几个类似的报告,因此我创建了一个基本结构,在标题中有一个子报告,在页脚中有另一个子报告。

<?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="reportFooterV" pageWidth="550" pageHeight="650" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="550" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="6a63a92f-0859-4b0b-84b8-6166c2fe0951">
    <property name="ireport.zoom" value="1.5"/>
    <property name="ireport.x" value="19"/>
    <property name="ireport.y" value="0"/>
    <parameter name="date" class="java.lang.String" isForPrompting="false"/>
    <title>
        <band height="19">
            <textField>
                <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="0" y="0" width="191" height="19" forecolor="#999999"/>
                <textElement verticalAlignment="Bottom">
                    <font fontName="Roboto" size="10" isBold="false"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{date}]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Auto">
                <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="352" y="0" width="99" height="19" forecolor="#999999"/>
                <textElement textAlignment="Right" verticalAlignment="Bottom">
                    <font fontName="Roboto" size="10" isBold="false"/>
                </textElement>
                <textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>
<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="systemParametersSummary" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" resourceBundle="properties.Messages" isIgnorePagination="true" uuid="6a63a92f-0859-4b0b-84b8-6166c2fe0951">

....
    <pageFooter>
        <band height="22">
            <subreport>
                <reportElement uuid="ac3cfc74-4e5a-45bc-945a-7ca6c82c4f6a" x="2" y="0" width="150" height="22"/>
                <subreportParameter name="date">
                    <subreportParameterExpression><![CDATA[$P{date}]]></subreportParameterExpression>
                </subreportParameter>
                <subreportExpression><![CDATA[$P{footer}]]></subreportExpression>
            </subreport>
        </band>
    </pageFooter>
</jasperReport>

我不知道为什么我找不到解决这个问题的方法,如果有人能帮我...谢谢!

共有1个答案

巴洲
2023-03-14

如果您只使用这些子报告进行页面编号,那么这就是为什么您会得到一个错误。这些子报告中的每一个只有1页长,因此它将永远是1的第1页。

通常也不需要以这种方式使用子报表进行页码编号,因为调用子报表所需的开销超过了从这样做中获得的任何好处。

我建议您去掉子报表,只允许主报表使用主报表引擎数据来完成繁重的工作,例如在整个报表中使用页码,方法是将日期的文本字段放在主报表页脚中,并使用以下代码进行页码设置:

<textField evaluationTime="Master">
    <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="352" y="0" width="99" height="19" forecolor="#999999"/>
        <textElement textAlignment="Right" verticalAlignment="Bottom">
            <font fontName="Roboto" size="10" isBold="false"/>
    </textElement>
    <textFieldExpression><![CDATA[$V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}]]></textFieldExpression>
</textField>
<pageFooter>
        <band height="22">
            <textField>
            <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="0" y="0" width="191" height="19" forecolor="#999999"/>
            <textElement verticalAlignment="Bottom">
                <font fontName="Roboto" size="10" isBold="false"/>
            </textElement>
            <textFieldExpression><![CDATA[$P{date}]]></textFieldExpression>
        </textField>
        <textField evaluationTime="Master">
            <reportElement uuid="89a04d3d-73e0-4f28-9747-3206c4022769" x="352" y="0" width="99" height="19" forecolor="#999999"/>
            <textElement textAlignment="Right" verticalAlignment="Bottom">
                <font fontName="Roboto" size="10" isBold="false"/>
            </textElement>
            <textFieldExpression><![CDATA[$V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}]]></textFieldExpression>
        </textField>
    </band>
</pageFooter>

不要忘记,如果您在主报表标题带中使用子报表,那么您可能也应该重新考虑这种方法。

如果有特定的原因,您可以在子报告中应用相同的逻辑,按照原始问题使用。当您使用母版页编号时,这也将给出正确的结果。例如,子报告代码如下所示:

<?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="reportFooterV" pageWidth="550" pageHeight="650" orientation="Landscape" whenNoDataType="AllSectionsNoDetail" columnWidth="550" leftMargin="0" rightMargin="0" topMargin="0" bottomMargin="0" uuid="6a63a92f-0859-4b0b-84b8-6166c2fe0951">
    <parameter name="date" class="java.lang.String" isForPrompting="false"/>
    <title>
        <band height="22">
            <textField>
                <reportElement x="0" y="0" width="191" height="19" forecolor="#999999" uuid="89a04d3d-73e0-4f28-9747-3206c4022769"/>
                <textElement verticalAlignment="Bottom">
                    <font fontName="Roboto" size="10" isBold="false"/>
                </textElement>
                <textFieldExpression><![CDATA[$P{date}]]></textFieldExpression>
            </textField>
            <textField evaluationTime="Master">
                <reportElement x="352" y="0" width="99" height="19" forecolor="#999999" uuid="89a04d3d-73e0-4f28-9747-3206c4022769"/>
                <textElement textAlignment="Right" verticalAlignment="Bottom">
                    <font fontName="Roboto" size="10" isBold="false"/>
                </textElement>
                <textFieldExpression><![CDATA[$V{MASTER_CURRENT_PAGE} + " of " + $V{MASTER_TOTAL_PAGES}]]></textFieldExpression>
            </textField>
        </band>
    </title>
</jasperReport>
 类似资料:
  • 我正在从. jasper文件加载jasper报告文件以提高性能,如下所示。 但是我现在有一个要求,动态形成的查询必须设置为. jasper(编译)文件。有没有办法做同样的事情?

  • 当简单报表不适用于子报表时,此操作有效...

  • 我正在使用Jaspersoft studio创建报告。我在我的Jasper主报告中有一个子报告。问题是,我无法做到这一点,因为如果我将子报告添加到主报告的< code>Detail band中,子报告会生成多次,有时是逐行生成,有时是整个子报告在若干页中重复。出于同样的原因,我不能把它放在< code > summer Band 中。 我无法将其放入或其他页脚中,因为它显示以下错误 由于以下错误,

  • 我想在Jasper Reports报表的页脚中打印当前页码和总页码,如短语“第2页,共10页”。短语必须在页边距之间居中。文本模式依赖于区域设置。 自然的方法是使用消息模式来进行格式化和翻译,例如msg($R{msg_page_number},$V{PAGE_NUMBER},$V{TOTAL_PAGE_NUMBERS})。这是不可能的,因为没有像TOTAL_PAGE_NUMBERS这样的变量。必须

  • 我正试图将jasper报告与Spring roo整合起来。当我在roo shell中运行' OSGi start-URL http://s.digitalface.ca/jasperoo-latest' '时,会得到' org . OSGi . framework . bundle exception:bundle ca . digital face . jasperoo[77]中未解析的约束:无

  • 如何在jasper子报告中显示当前页码?我只做了第一页,变量如下:$V{page_NUMBER}和“(”$V{page_COUNT}“)”,但我们如何在所有子报告中显示?