Skip to content

DynamicReports – riport generálás

Zalan Toth edited this page Feb 16, 2018 · 1 revision

Gyakran szükséges bizonyos adatokat vizualizáli az ügyfeleknek különféle szempontok alapján. Ebben lehet segítségünkre a DynamicReports , mely egy JasperReports alapú, könnyen használható, teljesen Javaból összeállítható riport szerkesztő könyvtár.

A példában egy fizetéseket tároló listát jelenítünk meg. A riport sorai a következő oszlopokat tartalmazzák:

@Getter
@Setter
@Builder
public class ReportRow {
    private String name;
    private Integer salary;
    private String address;
    private String job;
}

A riport összeállítása mindössze pár sor:

01    public class ReportGenerator {
02    
03        public static void main(String[] args) {
04        
05            try (OutputStream outputStream = new FileOutputStream("report.pdf")) {
06        
07                StyleBuilder boldCentered = stl.style()
08                        .bold()
09                        .setHorizontalTextAlignment(HorizontalTextAlignment.CENTER);
10        
11                StyleBuilder columnTitleStyle = stl.style(boldCentered)
12                        .setBorder(stl.pen1Point())
13                        .setBackgroundColor(Color.LIGHT_GRAY);
14        
15                TextColumnBuilder<Integer> salaryColumnBuilder =
16                        Columns.column("Salary", "salary", DataTypes.integerType());
17        
18                TextColumnBuilder<String> nameColumnBuilder =
19                        Columns.column("Name", "name", DataTypes.stringType());
20        
21                Bar3DChartBuilder salaryChart = cht.bar3DChart()
22                        .setTitle("Salary")
23                        .setCategory(nameColumnBuilder)
24                        .addSerie(cht.serie(salaryColumnBuilder));
25        
26                report()
27                        .setColumnTitleStyle(columnTitleStyle)
28                        .highlightDetailEvenRows()
29                        .title(cmp.text("Salary").setStyle(boldCentered))
30                        .columns(
31                                nameColumnBuilder,
32                                Columns.column("Job", "job", DataTypes.stringType()),
33                                Columns.column("Address", "address", DataTypes.stringType()),
34                                salaryColumnBuilder
35                        )
36                        .subtotalsAtSummary(sbt.sum(salaryColumnBuilder))
37                        .summary(salaryChart)
38                        .setDataSource(reportData())
39                        .toPdf(outputStream);
40        
41            } catch (DRException | IOException e) {
42                throw new RuntimeException(e);
43            }
44        
45        }
46    
47        private static List<ReportRow> reportData() {
48            List<ReportRow> rows = new LinkedList<>();
49    
50            rows.add(ReportRow.builder()
51                    .address("Budapest")
52                    .job("Developer")
53                    .name("Gipsz Jakab")
54                    .salary(2100)
55                    .build());
56    
57            [...]
58    
59            return rows;
60        }
61    }

[7. - 13. sor]

Először létrehozunk két stílust, az első a címsor, a második az oszlopok fejlécének stílusa.

[15. - 19.]

Létrehozzuk a név és fizetés oszlopokat. Mivel a többi oszlopot csak egyszer használjuk, így azokat inline példányosítjuk.

[21. - 24.]

Egy oszlopdiagramot hozunk létre, melynek kategóriája a dolgozók neve, az értékkészlete pedig a dolgozók bére.

[26]

A DynamicReports osztály statikus report() metódusa visszaad egy JasperReportBuildert , melyet felhasználva paraméterezhetjük a riportot.

[27. - 29.]

Beállítjuk a stílusokat, címsort, valamint minden páros sort színezünk.

[30. - 35.]

Beállítjuk a kívánt oszlopokat. A fieldName paraméternek meg kell egyeznie a pojo osztályban lévő mezőnévvel.

[36]

A fizetést tartalmazó oszlopban szereplő értékeket az oszlop alatt összesítjük.

[37]

Beállítjuk a korábban létrehozott diagramot.

[38]

Átadjuk az adatokat, melyeket a reportData() függvényben állítunk össze.

[39]

A kimeneti streamre exportáljuk a riportot pdf formátumban.

Elkészült a riportunk:

picture alt

A forrás elérhető GitHubon

A DynamicReports hivatalos oldala itt.

Clone this wiki locally