AFIK Нет встроенного свойства, которое сообщит вам, что вы находитесь в сводной полосе.
Однако я думаю, что это тот случай, когда вы можете безопасно использовать то, что я называю "решение для взлома параметров, если сводная полоса находится на нескольких страницах или по какой-либо другой причине вам не нравится использовать полосу lastPageFooter
.
Решение для взлома параметров
Добавьте параметр, который является java.util.Set
(вы также можете использовать List
, Map
или другие подобные классы).Создайте его с пустым HashSet
.
<parameter name="paramHack" class="java.util.Set">
<defaultValueExpression><![CDATA[new java.util.HashSet()]]> </defaultValueExpression>
</parameter>
В textField (в вашем случае сначала на итоговой полосе) добавьте ключ к нему в printWhenExpression
, будьте осторожны сВыражение может быть оценено более одного раза, поэтому всегда проверяйте, что оно возвращает true.
<printWhenExpression><![CDATA[$P{paramHack}.add("summary") || true]]></printWhenExpression>
Теперь вы можете использовать $P{paramHack}.contains("summary")
, чтобы узнать, был ли вычислен textField, следовательно, в случаечтобы узнать, приехали ли мы в сводную группу и не печатать «конфиденциальный отказ от ответственности».
<printWhenExpression><![CDATA[!$P{paramHack}.contains("summary")]]></printWhenExpression>
Пример
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="WhenSummary" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isSummaryNewPage="true" isSummaryWithPageHeaderAndFooter="true" uuid="bbec9a5c-d9fc-4e29-b2b0-cea6d7a50394">
<parameter name="paramHack" class="java.util.Set">
<defaultValueExpression><![CDATA[new java.util.HashSet()]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[]]>
</queryString>
<pageHeader>
<band height="35" splitType="Stretch"/>
</pageHeader>
<detail>
<band height="40">
<staticText>
<reportElement x="0" y="0" width="545" height="40" uuid="74f6c3de-9867-4895-b7bb-c9cdb124fbdc"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="26"/>
</textElement>
<text><![CDATA[First just an empty page]]></text>
</staticText>
</band>
</detail>
<pageFooter>
<band height="40" splitType="Stretch">
<textField>
<reportElement x="50" y="0" width="440" height="40" uuid="af5f6f4c-fe77-4f07-a080-035230123f50">
<printWhenExpression><![CDATA[!$P{paramHack}.contains("summary")]]></printWhenExpression>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="26"/>
</textElement>
<textFieldExpression><![CDATA["Confidential"]]></textFieldExpression>
</textField>
<textField>
<reportElement x="493" y="0" width="60" height="40" uuid="78b7b8bd-4189-42ea-8120-5a09a8b5701c"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="22"/>
</textElement>
<textFieldExpression><![CDATA[$V{PAGE_NUMBER}]]></textFieldExpression>
</textField>
</band>
</pageFooter>
<summary>
<band height="40" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="545" height="40" uuid="9ee45216-e7e1-4e5a-bbed-1f057ade1967">
<printWhenExpression><![CDATA[$P{paramHack}.add("summary") || true]]></printWhenExpression>
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="26"/>
</textElement>
<text><![CDATA[Summary page]]></text>
</staticText>
</band>
</summary>
</jasperReport>
Вывод
Если вам также нравится использовать это решение для сводки pageHeader
(который начинается до итога, но после детального диапазона), например, вы можете добавить «поддельную» группу и в нижний колонтитул группы (который оценивается после детального диапазона, но перед заголовком страницы в итоговом диапазоне) добавить еще одно свойство в нашу paramHack
параметр detail_end
.
<group name="FakeGroup">
<groupExpression><![CDATA["dummy"]]></groupExpression>
<groupFooter>
<band height="1">
<textField>
<reportElement x="0" y="0" width="553" height="1" uuid="373fc74e-011a-4f03-9cd4-9d5d9464ab06">
<printWhenExpression><![CDATA[$P{paramHack}.add("detail_end") && false]]></printWhenExpression>
</reportElement>
<textFieldExpression><![CDATA["Hidden used just to know when detail band ends"]]></textFieldExpression>
</textField>
</band>
</groupFooter>
</group>
Примечание: я использовал другое имя, так как оно будет установлено до pageFooter
на последней странице полосы подробностей, поэтому вы не можете использовать одно и то же имя флага для обоих pageFooter
и pageHeader
.Чтобы уточнить на последней странице детализации полосы в pageFooter
, $P{paramHack}.contains("detail_end")
равен true
, но $P{paramHack}.contains("summary")
равен false
.
Затем в заголовке страницы используйте этот другой флаг, чтобы определить, показывать лиили не показывать контент.