JasperReports Tutorial - 8 - Paginare il report
Nell'articolo di oggi vedremo come paginare un report. JasperReports consente di paginare agevolmente un report tramite l'uso delle variabili:
- PAGE_NUMBER
- PAGE_COUNT
La variabile PAGE_NUMBER indica il numero della pagina corrente, mentre la variabile PAGE_COUNT indica il numero totale di pagine presenti. Possiamo così ottenere l'effetto paginazione inserendo la seguente espressione da inserire nella banda Piè di Pagina
"Pagina "+$V{PAGE_NUMBER}+" di " + $V{PAGE_NUMBER}
Questa soluzione fallisce nel momento in cui il report è ottenuto come aggregazione di report ottenuti tramite programmazione. Usando una lista di oggetti JasperPrint vedremo la numerazione ripartire più volte e non essere continua.
Per aggirare il problema possiamo sfruttare il passaggio di parametri e fornire ad ogni report un parametro contenente il totale delle pagine fino al quel momento.
Siccome una porzione di codice vale più di mille parole ecco un estratto che chiarisce
try {
List<JasperPrint> jasperPrintList = new ArrayList<JasperPrint>();
int totalePagine = 0;
for (int j = 0; j < 5; j++) {
Map<String, Object> lParametersTmp = new HashMap<String, Object>();
lParametersTmp.put("TOTALE_PAGINA_CORRENTE", totalePagine);
JasperPrint jasperPrintMulti = JasperFillManager.fillReport(j+"", lParametersTmp, new JREmptyDataSource());
totalePagine = totalePagine + jasperPrint.getPages().size();
jasperPrintList.add(jasperPrint);
}
} catch (JRException e) {
e.printStackTrace();
}
Nel nostro report modifichiamo l'espressione della banda Piè di Pagina in questo modo
"Pag. " + ($P{TOTALE_PAGINA_CORRENTE} + $V{PAGE_NUMBER})
Questa modifica ci consente di numerare le pagina in modo crescente ma non ci permette di ottenere l'effetto X di Y.
Se volessimo ottenere l'effetto X di Y dobbiamo effettuare un doppio ciclo:
- il primo ci permette di ottenere il totale delle pagine
- il secondo ciclo ci permette di passare il totale delle pagine e la paginazione corrente come parametri,
Buona sperimentazione.
Se hai trovato l'articolo utile un +1 non dispiace.