Jasper Reports Show "Page X of Y" using a single text field
jasper-reports
Solution
Jaspersoft Studio, 6+
For Jaspersoft Studio v6, or if the first page number is duplicated, try this solution, which uses `$V{MASTER_CURRENT_PAGE}` and `$V{MASTER_TOTAL_PAGE}` with an evaluation time of `Master`.
Jaspersoft Studio
For other versions of Jaspersoft Studio, try the steps outlined in the subsequent subsections.
Create Variable
Create a variable as follows:
- Create a variable called `V_CURRENT_PAGE_NUMBER`
- Select the variable to open its properties (illustrated below)
- Set Expression to: `1`
- Set Initial Value Expression to: `$V{PAGE_NUMBER}`
- If the page number shows `0`, use `$V{PAGE_NUMBER} + 1`.
- If the page number always shows `1 of Y`, set Expression to `$V{PAGE_NUMBER}` instead of the initial value expression, and leave the initial value expression empty.
- Set Reset type to: `Page`
These settings are illustrated in the following figure:
Setting the Expression to `1` prevents its value from being `null`. That is, if the footer shows Page null of 4 it probably means that the Expression hasn't been set.
The variable is created.
Add Page Footer
Add a Page Footer band as follows:
- Select the report in the outline panel
- Check Summary With Page Header And Footer to ensure the page footer appears on the summary page.
- Add a Page Footer band.
The footer is added.
Create Text Field
Create a text field as follows:
- Drag and drop a single text field onto the Page Footer band.
- Select the text field.
- Set Expression to: `msg("Page {0} of {1}", $V{V_CURRENT_PAGE_NUMBER}, $V{PAGE_NUMBER})`
- Set Evalutation Time to: `Auto`
These settings are illustrated in the following figure:
The single text field is created.
Preview Report
For a report with three pages plus a summary page, previewing the report shows:
The summary page shows:
Problem
I would like to create one text field that contains `Page X of Y`, without splitting it in two parts, as per the common solution. My textfield contains `"Page " + $V{currentPage} + " of " + $V{PAGE_NUMBER}"` with `evaluationTime=auto`. Let's say I have a report with 10 pages. Three are the Title Band, six are Detail Band and one is the Summary Band. My results show `"Page 0 of 10"` for the Title Bands, correct counts for the Detail Bands, then `"Page 0 of 10"` for the Summary Bands. How do you ensure the variable is calculated everywhere, not only on Detail Band?