Сравнить текущий номер страницы с последним номером страницы



Как проверить, является ли текущая печатная страница на самом деле последней печатной страницей?



Я попробовал следующее:



$V{currentPage}.intValue() == $V{totalNumberOfPages} ?
Boolean.TRUE : Boolean.FALSE
421   3  

3 ответов:

Ждали долго .. но никакого ответа от Stackoverflow... Так или иначе, я нашел свое решение..

Сначала в вашей сводной полосе поставьте эту строку

<printWhenExpression><![CDATA[new Boolean($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen"))]]></printWhenExpression>

Помните, что эта строка должна быть только в сводной полосе отчета.

После этого вы можете сравнить этот параметр в любой момент времени в вашем отчете, чтобы найти номер последней страницы .

Например

<printWhenExpression><![CDATA[new Boolean(!$V{PAGE_NUMBER}.equals($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber")))]]></printWhenExpression>

Со следующей печатью, когда выражение итоговая полоса печатается снова:

new Boolean(($P{REPORT_PARAMETERS_MAP}.put(
"LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen")) ||
Boolean.TRUE)

Вы также можете использовать тест containskey tot для существования ключа:

new Boolean(!$P{REPORT_PARAMETERS_MAP}.containsKey("LastPageNumber"))

Числовые выражения также работают, это выражение принимает значение true на каждой странице, кроме той, на которой установлен параметр:

new Boolean($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber") < $V{PAGE_NUMBER})

Моя проблема заключалась в том, что я создал несколько групповых колонтитулов для нескольких перекрестных таблиц в конце моего отчета, с константой в качестве группового выражения, поэтому они печатаются только однажды. Установив параметр в первом нижнем колонтитуле, я теперь могу, наконец, переписать заголовки столбцов, не прибегая к вложенным отчетам. Отличная работа!!

Берри.

К сожалению, Ваш подход не сработал для меня, я не знаю, почему.. есть некоторые вещи в вашем коде, которые подвержены ошибкам, как это

<![CDATA[new Boolean($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER}).equals("dummyPrintWhen"))]]></printWhenExpression>

Я думаю на самом деле, что Summary Band вызывается только один раз, но у вас есть плохая практика программирования в этом, потому что если нет ключа, ассоциированного с KEY in the MAP, он вернет null, и вы вызовете метод equals на нем вы получите NULLPOINTEREXCEPTION, но я думаю, что не в этом случае.

Вы должны повернуть вспять вот так

<![CDATA[new Boolean("dummyPrintWhen".equals($P{REPORT_PARAMETERS_MAP}.put("LastPageNumber",$V{PAGE_NUMBER})))]]></printWhenExpression>

В обходной путь, который я использовал в этом вопросе, заключается в следующем.

1). создайте параметр в jasperreports

parameter name="totalRecordsOnReport" class="java.lang.Integer"

2). передайте итоговые записи вашей детализации в качестве параметра.

HashMap<Object,Object>parameters=....
parameters.put("totalRecordsOnReport",yourDetailRowCount);

Мне нужно напечатать некоторые вещи только на последней странице под детализацией, и я использую этот код.

component print when expression

$V{REPORT_COUNT}.equals($P{totalRecordsOnReport})

И печатает на последней странице.

Comments

    Ничего не найдено.