Boa tarde.
Preciso gerar relatorio no JasperViewer no lado do cliente.
Consegui gerar apenas do lado do servidor…
Nao quero exibir em pdf, pois necessito que o usuario escolha o formato que quer salvar (doc, xls, rtf)…
Estou usando a biblioteca POI para salvar como xls…
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRPrintPage;
import net.sf.jasperreports.engine.JRRuntimeException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;
import br.gov.sp.polmil.framework.utils.MapUtil;
import flex.messaging.FlexContext;
import flex.messaging.FlexSession;
@SuppressWarnings("unchecked")
public class GenerateRTF{
private String uuid;
private String sessionid;
private List<JasperPrint> jasperPrintList;
public Object generate(Map<String, Object> params) {
FlexSession session = FlexContext.getFlexSession();
uuid = params.get("uuid").toString();
sessionid = params.get("sessionid").toString();
try {
jasperPrintList = (List<JasperPrint>) session.getAttribute(sessionid);
} catch (Exception e) {
}
if (jasperPrintList==null) {
jasperPrintList = new ArrayList<JasperPrint>();
}
Map map = new HashMap();
map.putAll(params);
MapUtil.castToJRBean(map);
jasperPrintList.add(gerarJasperPrint(map));
session.setAttribute(sessionid, jasperPrintList); // sessionid guarda a lista
byte[] pdf = gerarPDFArray();
Boolean isRemote = ((String)map.get("isRemote")).equalsIgnoreCase("true");
if(isRemote){
String contextRoot = FlexContext.getHttpRequest().getRequestURL().toString();
contextRoot = contextRoot.substring(0,contextRoot.indexOf("messagebroker/amf"));
session.setAttribute(uuid, pdf); // uuid guarda a imagem do report
String url = contextRoot + "dynamic-pdf?id=" + uuid +"&jsessionid="+ sessionid;
return url;
}else{
return pdf;
}
}
private JasperPrint gerarJasperPrint(Map map) {
String jasperFile = (String)map.get("reportName");
String pathJasper = ((String)map.get("pathJasper")) + jasperFile + ".jasper";
JasperPrint jasperPrint = null;
try {
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(pathJasper);
//JREmptyDataSource ED = new JREmptyDataSource();
if (map.containsKey("REPORT_DATA_SOURCE")) {
JRDataSource ds = (JRDataSource) map.get("REPORT_DATA_SOURCE");
//jasperPrint = JasperFillManager.fillReport(jasperReport, map, ds);
JasperPrint impressao = new JasperPrint();
impressao = JasperFillManager.fillReport(jasperReport, map, ds);
//JasperViewer viewer = new JasperViewer(impressao , false);
JasperViewer.viewReport(impressao, false);
} else {
jasperPrint = JasperFillManager.fillReport(jasperReport, map, new JREmptyDataSource());
}
}catch (JRException e) {
e.printStackTrace();
}catch (JRRuntimeException e) {
System.out.println("ERRO NO JRXML");
e.printStackTrace();
}catch (Exception e) {
e.printStackTrace();
}
return jasperPrint;
}
private byte[] gerarPDFArray(){
JasperPrint jasperPrint = appendReports();
byte[] pdf = null;
try {
pdf = JasperExportManager.exportReportToPdf(jasperPrint);
} catch (JRException e) {
e.printStackTrace();
}
return pdf;
}
private JasperPrint appendReports(){
JasperPrint jasperPrint = null;
JasperPrint pages = jasperPrintList.get(0);
synchronized (pages)
{
if (jasperPrintList.size()>1) {
jasperPrint = jasperPrintList.get(jasperPrintList.size()-1);
List<JRPrintPage> list = jasperPrint.getPages();
for (JRPrintPage jRPrintPage : list) {
pages.addPage(jRPrintPage);
}
}
}
return pages;
}
}
e se funcionar let me know