Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Compare current page number with last page number

How do you check to see if the current printed page is actually the last printed page?

I have tried the following:

$V{currentPage}.intValue() == $V{totalNumberOfPages} ?
  Boolean.TRUE : Boolean.FALSE
like image 524
Mihir Avatar asked Feb 28 '11 04:02

Mihir


3 Answers

waited for a long time .. but no reply from Stackoverflow... Anyway i found my solution..

First in your summary band put this line

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

Remember this above line must be only in the summary band of the report.

After that you can compare this parameter at any point of time in your report to find last page number .

For Example

<printWhenExpression><![CDATA[new Boolean(!$V{PAGE_NUMBER}.equals($P{REPORT_PARAMETERS_MAP}.get("LastPageNumber")))]]></printWhenExpression>
like image 95
Mihir Avatar answered Sep 25 '22 22:09

Mihir


With the following Print When Expression the summary band gets printed again:

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

You can also use containskey tot test for the existance of the key:

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

Nummeric expressions also work, this expression evaluates to true on every page except the one on which the parameter is set:

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

My problem was that I created multiple group footers for several crosstabs at the end of my report, with a constant as the group expression so they get printed only once. By setting the parameter in the first footer I can now finally surpress the column headers without resorting to subreports. Great work!!

Berry.

like image 40
user2028755 Avatar answered Sep 23 '22 22:09

user2028755


unfortunately your approach didn't worked for me i dont know why.. there are some stuff about your code that are error-prone like this

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

i think in fact that the Summary Band is called only once but you have a bad programming practice in this because if there is not key associate with the KEY in the MAP it will return null and the you call the method equals on it you would receive NULLPOINTEREXCEPTION but i think not in this case.

you should reverse like this

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

the workaround i used on this question is the following.

1). create a parameter in jasperreports

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

2). pass the totals records of your detail as parameter.

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

i need to print some stuff only in the last page below the detail and i use this code.

component print when expression

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

and prints in the last page.

like image 42
chiperortiz Avatar answered Sep 22 '22 22:09

chiperortiz