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
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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.