Salvando Relatório

5 respostas
R

Boa tarde eu tenho um relatório iReport e não quero que abra direto em tela , preciso que abra uma janela para salvar.
desde ja agradeço. obrigado.

package com.br.servlets;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;

import com.br.beans.Login;
import com.br.conexao.ConexaoIreport;

/**
 * Servlet implementation class ServletRelatoriol
 */

public class ServletRelatorio extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void processRequest(HttpServletRequest httpServletRequest , HttpServletResponse httpServletResponse)
      throws ServletException, IOException {
		
		String var= httpServletRequest.getParameter("valor1");
		String var2_vinculo = httpServletRequest.getParameter("valor2");
		
			String path = getServletContext().getRealPath("/relatorios/");
			String relJasper = path+ "\\Consulta.jasper";
			
			HttpSession httpSession = httpServletRequest.getSession();
			
			List  listSession =	(List) httpSession.getAttribute("login");
			
			Iterator i = listSession.iterator();
				while (i.hasNext()){
					Login login = (Login)i.next();
					
					login.setUsuario(login.getUsuario());
					String usuario = login.getUsuario();
					
					Map parameter =  new HashMap();
					parameter.put("Valor", var);
					parameter.put("Tipo",Integer.parseInt(var2));
					parameter.put("Usuario",usuario);
					
					JasperPrint report = null;
					
					
					
					
					
					ConexaoIreport conexaoIreport = new ConexaoIreport();
					
						try{
							report = JasperFillManager.fillReport(relJasper, parameter, conexaoIreport.getConnection());
							
						    JasperExportManager.exportReportToPdfFile(report, "Consulta.pdf");  
							httpServletResponse.setContentType("application/pdf");
							
							byte x1[] =  JasperExportManager.exportReportToPdf(report);
							
							httpServletResponse.getOutputStream().write(x1);
						}
						catch (Exception e) {
							System.out.print(e.getMessage());
							e.printStackTrace();
						}
				}
			
		}
	
	public ServletRelatorio() {
        super();
        // TODO Auto-generated constructor stub
    }
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
}

Da maneira que está funciona mas está abrindo direto no browser, gostaria de escolher onde salvar .

5 Respostas

J-Chist

Acho que abre diretamente no browser porque você escreve diretamente no HttpServletResponse. Tenta assim:

report = JasperFillManager.fillReport(relJasper, parameter, conexaoIreport.getConnection()); JasperManager.printReportToPdfFile(report , "caminho/pro/report.pdf"); res.sendRedirect("report.pdf");

R

Não deu certo :frowning:

J-Chist

Eu tenho o pdf do tutorial de onde tirei esse exemplo, você quer?

cristianrm

Eu agradeço muito se vc mandar no meu email um exemplo tb [email removido] :slight_smile:

Mero_Aprendiz

Olá…
Bem escrevi meio rapido, mas acho que isso aqui pode te ajudar.

//Se você remover o "File" do final do nome do método, ele  retorna um byte[]
	byte[] bytes =  JasperExportManager.exportReportToPdf(report, "Consulta.pdf"); 

                response.setContentType("application/pdf");   
	response.setHeader("Content-Disposition", "attachment;filename="+ nomeDoArquivo);
	response.setContentLength(bytes.length);
	ServletOutputStream ouputStream;
	try {
		ouputStream = response.getOutputStream();
		ouputStream.write(bytes, 0, bytes.length);
		ouputStream.flush();
		ouputStream.close();
	} catch (IOException e) {
		e.printStackTrace();
	}

[]'s
JL

Criado 23 de março de 2009
Ultima resposta 25 de mar. de 2009
Respostas 5
Participantes 4