build_successful 28 de dez. de 2011
tenta assim …
response . setContentType ( "application/force-download" );
response . setHeader ( "Content-Disposition" , "inline;filename="
+ nome_relatorio + ".pdf" );
ServletOutputStream servletOutputStream = response . getOutputStream ();
InputStream reportStream = getServletConfig () . getServletContext () . getResourceAsStream ( "/jasper/teste.jasper" );
JasperRunManager . runReportToPdfStream ( reportStream , servletOutputStream , parametros , con );
servletOutputStream . flush ();
servletOutputStream . close ();
Luciano_Lopes 28 de dez. de 2011
Ele exibe aquela janela pra salvar ou abrir, só que nenhuma das opções funciona, o PDF corrompe
build_successful 28 de dez. de 2011
como ficou seu servlet depois q adicionou essas linhas…
coloca ai pra nois
Luciano_Lopes 28 de dez. de 2011
protected void processRequest ( HttpServletRequest request , HttpServletResponse response )
throws ServletException , IOException {
response . setContentType ( "text/html;charset=UTF-8" );
PrintWriter out = response . getWriter ();
try {
Connection con = new ConexaoMySQL (). getConnection ();
HashMap parametros = new HashMap ();
ServletContext sc = getServletContext ();
String nomeArquivo = sc . getRealPath ( "/" ) + "teste.pdf" ;
JasperPrint jp = JasperFillManager . fillReport ( sc . getRealPath ( "/jasper/teste.jasper" ), parametros , con );
JasperExportManager . exportReportToPdfFile ( jp , nomeArquivo );
response . setContentType ( "application/force-download" );
response . setHeader ( "Content-Disposition" , "inline;filename="
+ "teste" + ".pdf" );
ServletOutputStream servletOutputStream = response . getOutputStream ();
InputStream reportStream = getServletConfig (). getServletContext (). getResourceAsStream ( "/jasper/teste.jasper" );
JasperRunManager . runReportToPdfStream ( reportStream , servletOutputStream , parametros , con );
servletOutputStream . flush ();
servletOutputStream . close ();
out . println ( "<html>" );
out . println ( "<head>" );
out . println ( "<title>Servlet GeraPDF</title>" );
out . println ( "</head>" );
out . println ( "<body>" );
out . println ( "<h1>Relatório Gerado" + "</h1>" );
out . println ( "</body>" );
out . println ( "</html>" );
} catch ( Exception e ) {
e . printStackTrace ();
} finally {
out . close ();
}
}
Luciano_Lopes 28 de dez. de 2011
CharlesAlves 28 de dez. de 2011
Bem pra começar não vai ser mais possivel enviar uma resposta HTML pois um servlet só pode enviar uma unica resposta ao navegador sua servlet vai ficar mais ou menos assim
Connection con = null ;
OutputStream out = null ;
try {
con = new ConexaoMySQL () . getConnection ();
HashMap parametros = new HashMap ();
ServletContext sc = getServletContext ();
response . setContentType ( "application/force-download" );
response . setHeader ( "Content-Disposition" , "inline;filename="
+ "teste" + ".pdf" );
out = response . getOutputStream ();
JasperPrint print = JasperFillManager . fillReport (
sc . getRealPath ( "/jasper/teste.jasper" ), parametros , con );
JRExporter exporter = new JRPdfExporter ();
exporter . setParameter ( JRExporterParameter . JASPER_PRINT , print );
exporter . setParameter ( JRExporterParameter . OUTPUT_STREAM , out );
exporter . exportReport ();
} finally {
if ( out != null )
out . close ();
if ( con != null )
con . close ();
}
Bom eu não testei mas por ai já dá para se ter uma ideia de como vai ficar e que não há mais como enviar a página html para o cliente
gmmascarin 28 de dez. de 2011
Receba seu relatório em um iFrame via javaScript. Isso resolve seu problema.
Exemplo:
function submitRelatorio (){
var URL = [ A URL QUE CHAMA SEU SERVLET ]
var iframe = document . createElement ( "iframe" );
iframe . setAttribute ( "id" , "frameRelatorio" );
iframe . setAttribute ( "name" , "frameRelatorio" );
iframe . setAttribute ( "width" , "0" );
iframe . setAttribute ( "height" , "0" );
iframe . setAttribute ( "border" , "1" );
iframe . setAttribute ( "src" , URL );
document . forms [ 0 ] . appendChild ( iframe );
window . frames [ 'frameRelatorio' ] . name = "frameRelatorio" ;
}