Jérémy Goupil (Netapsys) : DynamicJasper, une API Open Source pour créer des tableaux croisés dynamiques Construction d'un tableau croisé avec DynamicJasper

Petit aperçu de la construction d'un tableau croisé en deux lignes et deux colonnes.

 CrosstabBuilder cb = new CrosstabBuilder();
 
cb.setHeight(500)
 .setWidth(500)
 .setHeaderStyle(mainHeaderStyle)
 .setDatasource("sr",DJConstants.DATA_SOURCE_ORIGIN_PARAMETER, DJConstants.DATA_SOURCE_TYPE_COLLECTION)
 .setUseFullWidth(true)
 .setColorScheme(0)
 .setCellBorder(Border.PEN_1_POINT);
 
 
cb.addMeasure("valeur",BigDecimal.class.getName(), DJCalculation.SUM, "Montant",measureStyle);
 
// Les deux lignes      
DJCrosstabRow row = new CrosstabRowBuilder()
  .setProperty("libelle_crit_1_niv_1",String.class.getName())
  .setHeaderWidth(200)
  .setHeight(50)
  .setTitle('titre de cette ligne')
  .setShowTotals(true)
  .setTotalStyle(totalStyle)
  .setTotalHeaderStyle(totalHeaderStyle)
  .setHeaderStyle(colAndRowHeaderStyle)
  .build();
 
cb.addRow(row);
 
row = new CrosstabRowBuilder()
  .setProperty("libelle_crit_1_niv_2",String.class.getName())
  .setHeaderWidth(200)
  .setHeight(50)
  .setTitle('titre de cette ligne')
  .setShowTotals(true)
  .setTotalStyle(totalStyle)
  .setTotalHeaderStyle(totalHeaderStyle)
  .setHeaderStyle(colAndRowHeaderStyle)
  .build();
 
cb.addRow(row);
 
// Les deux colonnes
DJCrosstabColumn col = null;
col = new CrosstabColumnBuilder()
  .setProperty("libelle_crit_2_niv_1",String.class.getName())
  .setHeaderHeight(60)
  .setWidth(200)
  .setTitle('titre de cette colonne')
  .setShowTotals(true)
  .setTotalStyle(totalStyle)
  .setTotalHeaderStyle(totalHeaderStyle)
  .setHeaderStyle(colAndRowHeaderStyle)
  .build();
 
cb.addColumn(col);
 
col = new CrosstabColumnBuilder()
  .setProperty("libelle_crit_2_niv_2",String.class.getName())
  .setHeaderHeight(60)
  .setWidth(200)
  .setTitle('titre de cette colonne')
  .setShowTotals(true)
  .setTotalStyle(totalStyle)
  .setTotalHeaderStyle(totalHeaderStyle)
  .setHeaderStyle(colAndRowHeaderStyle)
  .build();
 
cb.addColumn(col);
 
 
// construction du tableau croisé  
DJCrosstab djcross = cb.build();
 
String reportPath = getServletContext().getInitParameter("chemin");
 
String reportFullPath = reportPath + getServletContext().getInitParameter("chemin specifique");
 
FastReportBuilder drb = new FastReportBuilder();
 
//ajoute le tableau dans l'entete du rapport
drb.addHeaderCrosstab(djcross);
 
drb.setPrintColumnNames(true)
  .setAllowDetailSplit(false)
 
//Pour Excel, aucune pagination
  .setIgnorePagination(true)
 
  .setMargins(0, 0, 0, 0)
  .setTitle("titre")
  .setSubtitle("sous titre")
  .setPageSizeAndOrientation(new Page(5000, 5000, false))
  .setUseFullPageWidth(true);
 
DynamicReport dr = drb.build();
 
Map<String, Object> params = new HashMap (critereBilan, "Montant : ", map);
 
jp = DynamicJasperHelper.generateJasperPrint(dr, new ClassicLayoutManager(),lignes );
 
JasperReport jr = DynamicJasperHelper.generateJasperReport(dr, new ClassicLayoutManager(), params);
 
Collection dummyCollection = lignes;
dummyCollection = SortUtils.sortCollection(dummyCollection,dr.getColumns());
 
JRDataSource ds = new JRBeanCollectionDataSource(dummyCollection); 
jp = JasperFillManager.fillReport(jr, params,ds);
 
// un petit utilitaire pour afficher intégré dans l'API
JasperViewer.viewReport(jp);