Jasper Reports Show "Page X of Y" using a single text field

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:

  1. Create a variable called V_CURRENT_PAGE_NUMBER
  2. Select the variable to open its properties (illustrated below)
  3. Set Expression to: 1
  4. 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.
  1. Set Reset type to: Page

These settings are illustrated in the following figure:

Current Page Number Variable

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:

  1. Select the report in the outline panel
  2. Check Summary With Page Header And Footer to ensure the page footer appears on the summary page.
  3. Add a Page Footer band.

The footer is added.

Create Text Field

Create a text field as follows:

  1. Drag and drop a single text field onto the Page Footer band.
  2. Select the text field.
  3. Set Expression to: msg("Page {0} of {1}", $V{V_CURRENT_PAGE_NUMBER}, $V{PAGE_NUMBER})
  4. Set Evalutation Time to: Auto

These settings are illustrated in the following figure:

Single Text Field

The single text field is created.

Preview Report

For a report with three pages plus a summary page, previewing the report shows:

Page 1

The summary page shows:

Page 4


The common approach, as you mentioned, uses two separated text fields:

Current page number

$V{PAGE_NUMBER} with EvaluationTime: Now

Total page number

$V{PAGE_NUMBER} with EvaluationTime: Report


I tried this approach, but ended up with incorrect page numbers: {1/7, 1/7, 2/7, 3/7, 4/7, 5/7, 6/7}.

For JasperReports 6+, use MASTER_CURRENT_PAGE and MASTER_TOTAL_PAGES system variables and remember to set the text field evaluation time to Master:

<textField evaluationTime="Master">
    <textElement textAlignment="Right"/>
    <textFieldExpression><![CDATA[msg("Page {0} of {1}", $V{MASTER_CURRENT_PAGE}, $V{MASTER_TOTAL_PAGES})]]></textFieldExpression>
</textField>

See: http://jasperreports.sourceforge.net/sample.reference/book/index.html