annotate artifacts/src/main/java/org/dive4elements/river/artifacts/common/JasperReporter.java @ 9306:8024e51e828a

pdf export, issue 2.3.4.1.2
author gernotbelger
date Wed, 25 Jul 2018 18:36:26 +0200
parents 23945061daec
children
rev   line source
9005
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
1 /** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
2 * Software engineering by
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
3 * Björnsen Beratende Ingenieure GmbH
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
4 * Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
5 *
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
6 * This file is Free Software under the GNU AGPL (>=v3)
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
7 * and comes with ABSOLUTELY NO WARRANTY! Check out the
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
8 * documentation coming with Dive4Elements River for details.
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
9 */
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
10 package org.dive4elements.river.artifacts.common;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
11
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
12 import java.io.OutputStream;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
13 import java.util.ArrayList;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
14 import java.util.HashMap;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
15 import java.util.List;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
16 import java.util.Map;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
17
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
18 import org.dive4elements.artifacts.common.utils.Config;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
19
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
20 import net.sf.jasperreports.engine.JRDataSource;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
21 import net.sf.jasperreports.engine.JRException;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
22 import net.sf.jasperreports.engine.JRExporterParameter;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
23 import net.sf.jasperreports.engine.JasperCompileManager;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
24 import net.sf.jasperreports.engine.JasperFillManager;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
25 import net.sf.jasperreports.engine.JasperPrint;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
26 import net.sf.jasperreports.engine.JasperReport;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
27 import net.sf.jasperreports.engine.design.JasperDesign;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
28 import net.sf.jasperreports.engine.export.JRPdfExporter;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
29 import net.sf.jasperreports.engine.export.JRPdfExporterParameter;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
30 import net.sf.jasperreports.engine.util.JRProperties;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
31 import net.sf.jasperreports.engine.xml.JRSaxParserFactory;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
32 import net.sf.jasperreports.engine.xml.JRXmlLoader;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
33
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
34 /**
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
35 * @author Domenico Nardi Tironi
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
36 */
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
37 public class JasperReporter {
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
38
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
39 private final List<JasperDesigner> designs = new ArrayList<>();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
40
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
41 private final Map<String, Object> parameters = new HashMap<>();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
42
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
43 private final String confPath;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
44
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
45 public JasperReporter() {
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
46 this.confPath = Config.getConfigDirectory().toString();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
47
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
48 this.parameters.put("ReportTitle", "Exported Data");
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
49 }
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
50
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
51 public JasperDesigner addReport(final String jasperFile, final MetaAndTableJRDataSource source) throws JRException {
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
52
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
53 JRProperties.setProperty(JRSaxParserFactory.PROPERTY_REPORT_PARSER_FACTORY, JRReportSaxParserFactory.class.getName());
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
54
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
55 final String jasperPath = this.confPath + jasperFile;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
56 final JasperDesign design = JRXmlLoader.load(jasperPath);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
57
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
58 final JasperDesigner designer = new JasperDesigner(design, source);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
59 this.designs.add(designer);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
60
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
61 return designer;
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
62 }
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
63
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
64 public void exportPDF(final OutputStream out) throws JRException {
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
65 final List<JasperReport> compiledReports = new ArrayList<>();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
66 final List<JRDataSource> sourcesWithPages = new ArrayList<>();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
67 final List<JasperPrint> jasperPrintList = new ArrayList<>();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
68 if (this.designs.size() == 1) {
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
69 final JasperDesigner designer = this.designs.get(0);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
70 final JasperDesign jDesign = designer.getDesign();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
71
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
72 final JasperReport compiled = JasperCompileManager.compileReport(jDesign);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
73 compiledReports.add(compiled);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
74 final MetaAndTableJRDataSource source = designer.getSource();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
75 final JasperPrint print = JasperFillManager.fillReport(compiled, this.parameters, source);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
76 jasperPrintList.add(print);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
77 } else {
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9005
diff changeset
78 Integer totalpages = 0;
9005
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
79
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
80 // erstes Rendern, um Seitenzahl zu ermitteln
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
81 for (final JasperDesigner designer : this.designs) {
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
82
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
83 final JasperReport compiled = JasperCompileManager.compileReport(designer.getDesign());
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
84 compiledReports.add(compiled);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
85 final MetaAndTableJRDataSource source = designer.getSource();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
86 final JasperPrint print = JasperFillManager.fillReport(compiled, this.parameters, source);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
87
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9005
diff changeset
88 final Integer pagesCount = print.getPages().size();
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9005
diff changeset
89 designer.setPagesCount(totalpages);
9005
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
90
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9005
diff changeset
91 totalpages += pagesCount;
9005
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
92 }
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
93
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
94 // Sources mit pages machen
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
95 for (final JasperDesigner designer : this.designs) {
9150
23945061daec gigantic refactoring: exporter, result, results
gernotbelger
parents: 9005
diff changeset
96 final JRDataSource sourceWithPages = designer.getSource().withPagePageOffsets(designer.getPagesCount(), totalpages);
9005
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
97 sourcesWithPages.add(sourceWithPages);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
98 }
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
99
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
100 for (int i = 0; i < compiledReports.size(); i++) {
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
101 final JasperReport compiledReport = compiledReports.get(i);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
102 final JRDataSource source = sourcesWithPages.get(i);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
103 final JasperPrint print = JasperFillManager.fillReport(compiledReport, this.parameters, source);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
104 jasperPrintList.add(print);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
105 }
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
106 }
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
107 doExport(jasperPrintList, out);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
108 }
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
109
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
110 private void doExport(final List<JasperPrint> jasperPrintList, final OutputStream out) throws JRException {
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
111 final JRPdfExporter exporter = new JRPdfExporter();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
112 exporter.setParameter(JRExporterParameter.JASPER_PRINT_LIST, jasperPrintList);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
113 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, out);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
114 // this will make a bookmark in the exported PDF for each of the reports
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
115 exporter.setParameter(JRPdfExporterParameter.IS_CREATING_BATCH_MODE_BOOKMARKS, Boolean.TRUE);
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
116
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
117 exporter.exportReport();
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
118
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
119 }
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
120
460fcc128794 jasper multiple
gernotbelger
parents:
diff changeset
121 }

http://dive4elements.wald.intevation.org