public DynamicReport buildReport() throws Exception { Style detailStyle = new Style(); Style headerStyle = new Style(); headerStyle.setFont(Font.ARIAL_MEDIUM_BOLD); headerStyle.setBorder(Border.PEN_2_POINT()); headerStyle.setHorizontalAlign(HorizontalAlign.CENTER); headerStyle.setVerticalAlign(VerticalAlign.MIDDLE); Style titleStyle = new Style(); titleStyle.setFont(new Font(18, Font._FONT_VERDANA, true)); Style importeStyle = new Style(); importeStyle.setHorizontalAlign(HorizontalAlign.RIGHT); Style oddRowStyle = new Style(); oddRowStyle.setBorder(Border.NO_BORDER()); oddRowStyle.setBackgroundColor(Color.LIGHT_GRAY); oddRowStyle.setTransparency(Transparency.OPAQUE); DynamicReportBuilder drb = new DynamicReportBuilder(); int margin = 20; drb.setTitleStyle(titleStyle) .setTitle("November" + getYear() + " sales report") // defines the title of the report .setSubtitle( "The items in this report correspond " + "to the main products: DVDs, Books, Foods and Magazines") .setDetailHeight(new Integer(15)) .setLeftMargin(margin) .setMargins(margin, margin, margin, margin) // .setPrintBackgroundOnOddRows(true) .setPrintColumnNames(false) .setOddRowBackgroundStyle(oddRowStyle); AbstractColumn columnState = ColumnBuilder.getNew() .setColumnProperty("state", String.class.getName()) .setTitle("State") .setWidth(new Integer(85)) .setStyle(detailStyle) .setHeaderStyle(headerStyle) .build(); AbstractColumn columnBranch = ColumnBuilder.getNew() .setColumnProperty("branch", String.class.getName()) .setTitle("Branch") .setWidth(new Integer(85)) .setStyle(detailStyle) .setHeaderStyle(headerStyle) .build(); AbstractColumn columnaProductLine = ColumnBuilder.getNew() .setColumnProperty("productLine", String.class.getName()) .setTitle("Product Line") .setWidth(new Integer(85)) .setStyle(detailStyle) .setHeaderStyle(headerStyle) .build(); AbstractColumn columnaItem = ColumnBuilder.getNew() .setColumnProperty("item", String.class.getName()) .setTitle("Item") .setWidth(new Integer(85)) .setStyle(detailStyle) .setHeaderStyle(headerStyle) .build(); AbstractColumn columnCode = ColumnBuilder.getNew() .setColumnProperty("id", Long.class.getName()) .setTitle("ID") .setWidth(new Integer(40)) .setStyle(importeStyle) .setHeaderStyle(headerStyle) .build(); AbstractColumn columnaQuantity = ColumnBuilder.getNew() .setColumnProperty("quantity", Long.class.getName()) .setTitle("Quantity") .setWidth(new Integer(80)) .setStyle(importeStyle) .setHeaderStyle(headerStyle) .build(); AbstractColumn columnAmount = ColumnBuilder.getNew() .setColumnProperty("amount", Float.class.getName()) .setTitle("Amount") .setWidth(new Integer(90)) .setPattern("$ 0.00") .setStyle(importeStyle) .setHeaderStyle(headerStyle) .build(); GroupBuilder gb1 = new GroupBuilder(); // define the criteria column to group by (columnState) DJGroup g1 = gb1.setCriteriaColumn((PropertyColumn) columnState) .addFooterVariable( columnAmount, DJCalculation .SUM) // tell the group place a variable footer of the column "columnAmount" // with the SUM of allvalues of the columnAmount in this group. .addFooterVariable( columnaQuantity, DJCalculation.SUM) // idem for the columnaQuantity column .setGroupLayout( GroupLayout .DEFAULT_WITH_HEADER) // tells the group how to be shown, there are // manyposibilities, see the GroupLayout for more. .build(); GroupBuilder gb2 = new GroupBuilder(); // Create another group (using another column as criteria) DJGroup g2 = gb2.setCriteriaColumn( (PropertyColumn) columnBranch) // and we add the same operations for the columnAmount and .addFooterVariable(columnAmount, DJCalculation.SUM) // columnaQuantity columns .addFooterVariable(columnaQuantity, DJCalculation.SUM) .build(); drb.addColumn(columnState); drb.addColumn(columnBranch); drb.addColumn(columnaProductLine); drb.addColumn(columnaItem); drb.addColumn(columnCode); drb.addColumn(columnaQuantity); drb.addColumn(columnAmount); drb.addGroup(g1); // add group g1 // drb.addGroup(g2); // add group g2 drb.setUseFullPageWidth(true); DJChartBuilder cb = new DJChartBuilder(); DJChart chart = cb.setType(DJChart.BAR_CHART) .setOperation(DJChart.CALCULATION_SUM) .setColumnsGroup(g1) .addColumn(columnAmount) .addColumn(columnaQuantity) .setPosition(DJChartOptions.POSITION_HEADER) .setShowLabels(true) .build(); drb.addChart(chart); // add chart DynamicReport dr = drb.build(); return dr; }