Galera alguém já conseguiu gerar relatórios em pdf com ireport e vraptor? tenho um código pronto com o struts porém não roda no logic do vraptor? alguém poderia me dar uma ajudinha?
De que forma esta fazendo?
No struts faço assim
ListaAlunosForm listaAlunosForm = (ListaAlunosForm) form;
con.getConnection();
AlunosService alunosService = new AlunosService();
List<Alunos> list = alunosService.selectAlunos(alunos);
request.setAttribute("list", list);
if(listaAlunosForm.getOperacao() != null){
/////////////////////////////Relatorios/////////////////////////////
String pathJasper = getServlet().getServletContext().getRealPath("/relatorios/") + "/";
String pathImages = getServlet().getServletContext().getRealPath("/relatorios/") + "/";
String path = getServlet().getServletContext().getRealPath("/");
Map parametros = new HashMap();
parametros.put("SUBREPORT_DIR", pathJasper);
parametros.put("IMAGES_URI", pathJasper);
try {
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/Alunos.jasper",
parametros, ds);
byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
byte[] arquivo = bytes;
String nomeDoArquivo = "Alunos.pdf";
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment;
filename=".concat(nomeDoArquivo));
response.setContentLength(arquivo.length);
ServletOutputStream sos = response.getOutputStream();
sos.write(arquivo, 0, arquivo.length);
sos.flush();
sos.close();
} catch (Exception e) {
if(e.getClass().getSimpleName().equals("AbortException")){
System.out.println("Documento cancelado");
} else{
System.out.println("Outros");
}
}
}
con.closeConnection();
return mapping.findForward(SUCCESS);
}
}
mais no vraptor nao sei como fazer, pode me ajudar?
A resposta esta em anexo, obrigado pela ajuda de todos vcs
package ramal.logic;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletContext;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.Viewless;
import com.isdra.persistence.Conexao;
import com.isdra.service.RamalService;
import com.isdra.vo.Ramal;
@Component("report")
public class RelatorioDeContratosLogic{
Conexao con = new Conexao();
@Viewless
public void geraRelatorio(final ServletContext context, HttpServletRequest request, HttpServletResponse response) throws Exception{
con.getConnection();
/*
* Codigo para consultar a lista
*/
RamalService ramalService = new RamalService();
Ramal ramal = new Ramal();
List<Ramal> list = ramalService.selectRamalAll(ramal);
/*
* Final da consulta, retorna array para converter em pdf
*/
//Localiza o contexto da pasta onde esta localizado o .jasper
String pathJasper = context.getRealPath("/ireport/") + "/";
//Faz o mapeamento do context para levar o .jasper a conversao em bytes
Map parametros = new HashMap();
parametros.put("SUBREPORT_DIR", pathJasper);
try {
//Recebe a lista do array populado
JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
//pega o ds + a conexao para ir ate o ireport para listar o array dentro do relatorio
JasperPrint impressao = JasperFillManager.fillReport(pathJasper + "/ramal.jasper",
parametros, ds);
//converte o relatorio em bytes gerando o pdf
byte[] bytes = JasperExportManager.exportReportToPdf(impressao);
byte[] arquivo = bytes;
//Tratamento para exportacao do pdf para a url do browser e o tratamento de erros.
String nomeDoArquivo = "ramal.pdf";
response.setContentType("application/x-msdownload");
response.setHeader("Content-Disposition", "attachment; filename=".concat(nomeDoArquivo));
response.setContentLength(arquivo.length);
ServletOutputStream sos = response.getOutputStream();
sos.write(arquivo, 0, arquivo.length);
sos.flush();
sos.close();
} catch (Exception e) {
if(e.getClass().getSimpleName().equals("AbortException")){
System.out.println("Documento cancelado");
} else{
System.out.println("Outros");
}
}
}
}