1 package ecar.util.jasper;
2
3 import java.io.ByteArrayOutputStream;
4 import java.util.Map;
5
6 import net.sf.jasperreports.engine.JREmptyDataSource;
7 import net.sf.jasperreports.engine.JRException;
8 import net.sf.jasperreports.engine.JasperExportManager;
9 import net.sf.jasperreports.engine.JasperFillManager;
10 import net.sf.jasperreports.engine.JasperPrint;
11 import net.sf.jasperreports.engine.JasperReport;
12 import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
13 import net.sf.jasperreports.engine.util.JRLoader;
14
15 import org.apache.log4j.Logger;
16
17 import com.lowagie.text.Document;
18 import com.lowagie.text.pdf.PdfCopy;
19 import com.lowagie.text.pdf.PdfImportedPage;
20 import com.lowagie.text.pdf.PdfReader;
21
22
23
24
25
26
27 public class JasperService {
28
29 private static Logger logger = Logger.getLogger(JasperService.class);
30 public static String PATH_RELATORIO = "/PPAJasper";
31
32
33 public JasperService(){}
34
35
36
37
38
39
40
41 public static JasperReport loadReport( String pathReport ){
42
43 logger.info( "Carregando arquivo de relatorio <.jasper>" );
44 try {
45
46 JasperReport report = (JasperReport)JRLoader.loadObject( pathReport );
47 logger.info( "Arquivo de relatorio <.jasper> carregado com sucesso" );
48 return report;
49
50 } catch (JRException e) {
51 e.printStackTrace();
52 logger.error( "<ERRO JasperReports>: Nao foi possivel carregar arquivo de relatorio <.jasper>" , e );
53 return null;
54 }
55 catch ( Exception e) {
56 e.printStackTrace();
57 logger.error( "<ERRO>: Nao foi possivel carregar arquivo de relatorio <.jasper>" , e );
58 return null;
59 }
60
61 }
62
63
64
65
66
67
68
69
70 public static JasperPrint fillReport(JasperReport relatorio, Map parametros, JRBeanCollectionDataSource beanDS ){
71
72 logger.info( "Gerar objeto impressao Jasper" );
73 try {
74 JasperPrint print = JasperFillManager.fillReport(relatorio, parametros, beanDS );
75 return print;
76
77 } catch (JRException e) {
78 e.printStackTrace();
79 logger.error( "<ERRO JasperReports>: Nao foi possivel gerar impressao Jasper" , e );
80 return null;
81 } catch (Exception ex) {
82 ex.printStackTrace();
83 logger.error( "<ERRO>: Nao foi possivel gerar impressao Jasper" , ex );
84 return null;
85 }
86 }
87
88
89
90
91
92
93
94
95 public static JasperPrint fillReport(JasperReport relatorio, Map parametros ){
96
97 logger.info( "Gerar objeto impressao Jasper" );
98 try {
99
100
101 JasperPrint print = JasperFillManager.fillReport(relatorio, parametros, new JREmptyDataSource() );
102
103 return print;
104
105 } catch (JRException e) {
106 e.printStackTrace();
107 logger.error( "<ERRO JasperReports>: Nao foi possivel gerar impressao Jasper" , e );
108 return null;
109 } catch (Exception ex) {
110 ex.printStackTrace();
111 logger.error( "<ERRO>: Nao foi possivel gerar impressao Jasper" , ex );
112 return null;
113 }
114 }
115
116
117 public static Integer getNumberOfPages( JasperPrint relatorio ){
118 return relatorio.getPages().size();
119 }
120
121
122
123
124
125
126 public static void addRelatorio( JasperPrint relatorioOrigem, JasperPrint relatorioDestino, ByteArrayOutputStream out ){
127 try {
128
129 byte[] bytesOrg = geraRelatorioPDF(relatorioOrigem);
130 byte[] bytesDest = geraRelatorioPDF(relatorioDestino);
131
132 PdfReader readerOrg = new PdfReader(bytesOrg);
133 int paginasOrg = readerOrg.getNumberOfPages();
134 PdfReader readerDest = new PdfReader(bytesDest);
135 int paginasDest = readerDest.getNumberOfPages();
136
137 Document document = new Document(readerOrg.getPageSizeWithRotation(1));
138 PdfCopy writer = new PdfCopy( document, out );
139
140 document.open();
141
142 PdfImportedPage page;
143 for (int i = 0; i < paginasOrg; ) {
144 ++i;
145 page = writer.getImportedPage(readerOrg, i);
146 writer.addPage(page);
147 }
148
149 for ( int j =0;j<paginasDest;){
150 ++j;
151 page = writer.getImportedPage(readerDest, j);
152 writer.addPage(page);
153 }
154
155 document.close();
156
157 out.flush();
158 out.close();
159
160
161
162 } catch (Exception e) {
163 e.printStackTrace(System.out);
164 logger.error(e);
165 }
166 }
167
168 public static byte[] geraRelatorioPDF( JasperPrint impressaoJasper ){
169
170 try{
171 byte[] relFile = JasperExportManager.exportReportToPdf(impressaoJasper);
172
173 if(relFile.length <= 0){
174 logger.error( "<ERRO: Relatorio vazio>: Nao foi possivel gerar relatorio no formato PDF" );
175 return null;
176 }
177 return relFile;
178
179 } catch (JRException e) {
180 e.printStackTrace();
181 logger.error( "<ERRO JasperReports>: Nao foi possivel gerar relatorio no formato PDF" , e );
182 return null;
183 } catch (Exception ex) {
184 ex.printStackTrace();
185 logger.error( "<ERRO>: Nao foi possivel gerar relatorio no formato PDF" , ex );
186 return null;
187 }
188 }
189
190 public static byte[] geraRelatorioPDF( JasperReport relatorio, Map parametros, JRBeanCollectionDataSource beanDS ){
191
192 logger.info( "Gerando relatorio em formato PDF" );
193 try {
194
195 JasperPrint print = fillReport(relatorio, parametros, beanDS );
196 byte[] relFile = geraRelatorioPDF(print);
197
198 if(relFile.length <= 0){
199 logger.error( "<ERRO: Relatorio vazio>: Nao foi possivel gerar relatorio no formato PDF" );
200 return null;
201 }
202 return relFile;
203
204 } catch (Exception ex) {
205 ex.printStackTrace();
206 logger.error( "<ERRO>: Nao foi possivel gerar relatorio no formato PDF" , ex );
207 return null;
208 }
209 }
210
211 }