Como nomear o pdf que é gerado pelo ireport

2 respostas
carol-rj

olá, boa tarde

sei que é uma duvida bem boba :oops: , mas pesquisei e não achei a resposta

estou mexendo so pra estudar no ireport e fiz um exemplo simples de produto, esta funcionando direitinho, porem ao mandar gerar o pdf ele é gerado com o nome da action “produto-listar.do.pdf” (em extensão pdf)

vou postar oi código da classe que criei para gerar o pdf

public class Relatorio {
    private Connection conn;
    private JasperReport caminhoJrxml;
    private JasperPrint printReport = new JasperPrint();
    
    public OutputStream gerarRelatorio(Map parametros, String relatorioJRxml, HttpServletResponse response){
        OutputStream out = null;
        response.setContentType( "application/pdf" );
        try {
            out = response.getOutputStream();
            conn = DriverManager.getConnection("jdbc:mysql://localhost/teste?user=root&password=root");
            InputStream caminho = getClass().getResourceAsStream( relatorioJRxml+".jrxml" );
            caminhoJrxml = JasperCompileManager.compileReport(caminho) ;
            printReport = JasperFillManager.fillReport(caminhoJrxml, parametros, conn);

            JRExporter exportador = new JRPdfExporter();
            exportador.setParameter(JRExporterParameter.JASPER_PRINT, printReport);
            exportador.setParameter(JRExporterParameter.OUTPUT_STREAM, out); 
            
            exportador.exportReport();
        } catch (Exception e) {
            System.out.println("");System.out.println("");
            System.out.println("erro : " + e.getMessage());
            System.out.println("");System.out.println("");
            e.printStackTrace();
        }
        
        return out;
    }
    
}

alguém sabe como me ajudar?

2 Respostas

WRYEL

Olá, não trabalhe com arquivos .jrxml porquê você irá ter que compilar toda vez que for gerar um PDF novo, fazendo com que consuma mais recurso de máquina e consequentemente, sua aplicação fica mais lenta. Use os arquivos .jasper gerado (compilado).

O código abaixo devolve o array de bytes que você precisa. Dai é só fazer um FileOutputStream, ou escrever na outputStream do seu servlet:

Map<String, Object> params = new HashMap<String, Object>();
			
List<Object> listaDeObjetos = new ArrayList<Object>();

InputStream inputStream = getClass().getResourceAsStream("seuCompiladoAqui.jasper");
			
JRDataSource jrDataSource = new JRBeanCollectionDataSource(listaDeObjetos);

JasperPrint jasperPrint = JasperFillManager.fillReport(inputStream, params, jrDataSource);

byte[] bytes = JasperExportManager.exportReportToPdf(jasperPrint);

[]'s

carol-rj

obrigada pela ajuda

desculpa a ignorância, mas como uso o FileOutputStream ou o outputStream?

eu nunca usei

Criado 29 de fevereiro de 2012
Ultima resposta 1 de mar. de 2012
Respostas 2
Participantes 2