Compare current page number with last page number

前端 未结 3 890
余生分开走
余生分开走 2020-11-27 06:38

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{t         


        
相关标签:
3条回答
  • 2020-11-27 07:12

    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.

    0 讨论(0)
  • 2020-11-27 07:13

    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.

    0 讨论(0)
  • 2020-11-27 07:16

    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>
    
    0 讨论(0)
提交回复
热议问题