Présentation de DynamicJasper

Cette API open source est une surcouche de jasper report supportée, entre autres, par struts2, webwork et grails.

Elle permet de réaliser un rapport simple en quelques minutes, car son but est de cacher la complexité de jasper report et de se passer du designer Ireport qui n'est pas toujours très intuitif.

Actuellement en version 3.0.0, cette API open source est gratuite. Elle n'est pas sans défaut mais présente de bons points.

Les défauts :

- elle ne couvre pas encore toutes les fonctionnalités offertes par jasper ;

- le support est payant ( un forum existe, mais il faut s'armer de patience …).

Les bons points :

- les exemples fournis constituent de bons tutoriels ;

- il est facile de créer des tableaux croisés dynamiquement en quelques lignes de codes.

Voici une brève description de cette API prometteuse, pour plus d'informations rendez-vous sur http://dynamicjasper.sourceforge.net.

1 : Un petit aperçu de la construction de tableau croisé 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 HashMapBilan(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);

2 : Un exemple de feuille de style pour rendre plus sympathique le rapport ainsi généré.

initStyles();
 
private void initStyles() {
new StyleBuilder(false).setFont(Font.ARIAL_BIG_BOLD).setHorizontalAlign(HorizontalAlign.LEFT)
	.setVerticalAlign(VerticalAlign.MIDDLE)
	.setTransparency(Transparency.OPAQUE)
	.setBorderBottom(Border.PEN_2_POINT)
	.build();
 
totalHeaderStyle = new StyleBuilder(false)
	.setHorizontalAlign(HorizontalAlign.CENTER)
	.setVerticalAlign(VerticalAlign.MIDDLE)
	.setFont(Font.ARIAL_MEDIUM_BOLD)
	.setTextColor(Color.BLACK)
	.setBackgroundColor(Color.orange)
	.setTransparent(false)
	.build();
 
new StyleBuilder(false)
	.setHorizontalAlign(HorizontalAlign.CENTER)
	.setVerticalAlign(VerticalAlign.MIDDLE)
	.setFont(Font.ARIAL_MEDIUM_BOLD)
	.setTextColor(Color.BLACK)
	.setBackgroundColor(Color.orange)
	.build();
 
colAndRowHeaderStyle = new StyleBuilder(false)
	.setHorizontalAlign(HorizontalAlign.CENTER)
	.setVerticalAlign(VerticalAlign.MIDDLE)
	.setFont(Font.ARIAL_MEDIUM)
	.build();
 
mainHeaderStyle = new StyleBuilder(false)
	.setHorizontalAlign(HorizontalAlign.LEFT)
	.setVerticalAlign(VerticalAlign.MIDDLE)
	.setFont(Font.ARIAL_MEDIUM)
	.setTextColor(Color.BLACK)
	.build();
 
totalStyle = new StyleBuilder(false).setPattern("#,###")
	.setHorizontalAlign(HorizontalAlign.CENTER)
	.setVerticalAlign(VerticalAlign.MIDDLE)
	.setFont(Font.ARIAL_MEDIUM_BOLD)
	.setBackgroundColor(Color.orange)
	.setBorderColor(Color.BLACK)
	.setTransparent(false)
	.build();
 
measureStyle = new StyleBuilder(false).setPattern("#,###")
	.setHorizontalAlign(HorizontalAlign.CENTER)
	.setVerticalAlign(VerticalAlign.MIDDLE)
	.setFont(Font.ARIAL_MEDIUM)
	.setStretching(Stretching.RELATIVE_TO_TALLEST_OBJECT)
	.build();
}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Captcha *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.