Jasper reports com jsp

Pessoal,

Estou conseguindo gerar o pdf no diretorio /home/desenvolvimento/workspace/local/build/web/emissaobl usando o servelet abaixo:

package utilitarios;

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.view.JasperViewer;
import java.sql.*;
import java.util.*;
import java.util.HashMap;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class emitebl {

private static Connection getConnection( ) throws ClassNotFoundException, SQLException{
String driver = "org.postgresql.Driver";
String url = "jdbc:postgresql://localhost/sistema";
String user = "usuario";
String password = "";

Class.forName(driver);
Connection con = DriverManager.getConnection( url, user, password );
return con;
}

public void geraRelatorio( ) throws JRException, Exception{
    
try{    
Connection con = getConnection( );
Statement stm = con.createStatement( );
String query = "SELECT * FROM emissaobl";
ResultSet rs = stm.executeQuery(query);

JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
Map parameters = new HashMap();
String caminho = "/home/desenvolvimento/workspace/local/build/web/emissaobl/"; 

JasperFillManager.fillReportToFile(caminho+"emitebl.jasper",parameters,jrRS);
JasperExportManager.exportReportToPdfFile(caminho+"emitebl.jrprint"); 

JasperViewer.viewReport(caminho+"emitebl.pdf",false);

}catch (JRException e) {
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}
}
} 

E esse é o jsp:

<% 
try{
new emitebl().geraRelatorio(); 
} catch (JRException e) {
    out.println("JR: "+e.toString());
} catch (SQLException e) {
    out.println("SQL: "+e.toString());
}
%>

Mas o problema não é gerar…mas mostrar. Eu coloquei esse jsp para acionar o servlet e gerar o pdf. Só que ele da erro na linha que fala pra ele mostrar o pdf (JasperViewer.viewReport(caminho+"emitebl.pdf",false);).

Alguem tem uma idéia de como mostrar o pdf pro usuário?

Já li que o ideal não é gerar o pdf no disco mas sim gerar o pdf por stream e jogar no browser do usuário. Mas isso eu tb não tenho a mínima idéia de como fazer.

Alguém sabe como?

Do jeito que vc está tentando fazer seria se estivesse numa aplicação swing.
Para web você pode redirecionar o browser para o pdf, assim se o usuário tiver o plugin do acrobat reader habilitado no browser vai ser aberto o pdf senão vai avrir a janela de download.

[quote=furutani]Do jeito que vc está tentando fazer seria se estivesse numa aplicação swing.
Para web você pode redirecionar o browser para o pdf, assim se o usuário tiver o plugin do acrobat reader habilitado no browser vai ser aberto o pdf senão vai avrir a janela de download.[/quote]

furutani, obrigado por responder. Mas como faço isso? eu sei como colocar o content-type e o header no jsp, mas como faço para setar o caminho onde o pdf esta???

Para vc redirecionar para o pdf:

response.sendRedirect(caminho+"emitebl.pdf")

O pdf está em um local acessivel via browser?
Esse caminho que vc colocou lá no primeiro post está esquisito. Eu acho que deveria ficar dentro de um contexto do tomcat, ai vc consegue pegar o caminho relativo ao pdf gerado com o getRealPath().

[quote=furutani]Para vc redirecionar para o pdf:

response.sendRedirect(caminho+"emitebl.pdf")

O pdf está em um local acessivel via browser?
Esse caminho que vc colocou lá no primeiro post está esquisito. Eu acho que deveria ficar dentro de um contexto do tomcat, ai vc consegue pegar o caminho relativo ao pdf gerado com o getRealPath().

[/quote]

Ele esta gerando o pdf nesse diretorio, que acredito ser um diretorio de construção do netbeans (/home/desenvolvimento/workspace/local/build/web/emissaobl/). Eu realmente não sei como mudar ele, o certo é que ele gerasse o pdf nesse diretorio (/home/desenvolvimento/workspace/local/web/emissaobl/pdfs/), ai eu poderia usar o response.sendRedirect(caminho+"emitebl.pdf") para abrir o pdf ao usuário.

tenta mudar de pdf para jrprint…

Consegui, da seguinte forma:

String caminho = "/local/web/emissaobl/pdf/"; 

JasperFillManager.fillReportToFile(caminho2+"emitebl.jasper",parameters,jrRS);
JasperExportManager.exportReportToPdfFile(caminho2+"emitebl.jrprint",caminho2+"emitebl-"+idSessionUser+".pdf"); 

JasperFillManager.fillReportToFile(caminho+"emitebl.jasper",parameters,jrRS);
JasperExportManager.exportReportToPdfFile(caminho+"emitebl.jrprint",caminho+"emitebl-"+idSessionUser+".pdf"); 

Onde o caminho é o caminho relativo, e o caminho2 é o caminho real. Agora ta gerando o pdf de boa :). Vlw.