Enviar pdf para impressora (direto)

Pessoal

eu tenho um metodo que gera um relatorio em um pdf, o mesmo é exibido para o Usuario…

eu quero fazer a seguinte operação, quando gerar esse relatorio ja enviar direto para impressoa padrão do windows para imprimir.

alguem ja fez algo desse tipo?

esse é meu método que gera o relatorio web

[code]

public void imprimirFatura(HttpServletRequest request, HttpServletResponse response, Fatura fatura)throws Exception {

     Map<String, Object> params = new HashMap<String, Object>();
     OutputStream ops = null;
     String valorFinal = "";
     String jasper = "";


     jasper  = request.getContextPath() + "/reports/faturaSIAFIsim.jasper";
  
     ResultSet rs = imprimirFaturaFacade.gerarFatura(fatura);
     
     JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);    

     String host = "http://" + request.getServerName() + ":"+ request.getServerPort();    
     
     URL jasperURL = new URL(host + jasper);
     
     try {
            /**
             * Informo ao browser que a pagina que sera retornada e um arquivo
             * pdf
             */
            response.setContentType("application/pdf");
            /**
             * Gero o relatorio e armazeno o stream retornado num array de bytes
             */
            byte[] bytes = JasperRunManager.runReportToPdf(jasperURL
                    .openStream(), params, jrRS);

            /**
             * Pego uma referencia do outputStream e gravo nele meu array de
             * bytes
             */
          if (bytes != null) {
               ops = response.getOutputStream();
               ops.write(bytes);
           }

        } catch (JRException ex) {
            ex.printStackTrace();
        } finally {
            if (ops != null) {
                ops.flush();
                ops.close();
            }
        }    
 }[/code]

você pode enviar automaticamente chamando um método do jasper:

net.sf.jasperreports.engine.JasperManager.printPages(JasperPrint arg0, int arg1, int arg2, boolean arg3)

Porém, este método envia para impressora padrão instalada, não tem como você definir via código outra impressora…

Ou o método printPage, porém este abre um console pro usuário escolher pra qual impressoa enviar… nesse caso não é automático como você deseja…

Se a impressoa padrão servir, seu caso pode ser resolvido com o printPages.

cara
como é gerado esse arquivo print ?
os unicos arquivos que eu tenho é jxml e jasper
e o que são o restante dos parametros ?

[quote=Deluxe]cara
como é gerado esse arquivo print ?
os unicos arquivos que eu tenho é jxml e jasper
e o que são o restante dos parametros ?[/quote]

Dá uma olhada aqui que vai entender tranquilo…
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperManager.html

Mas já vi que o método que eu sugeri está deprecated e tem outro método novo…

veja o novo
http://jasperreports.sourceforge.net/api/net/sf/jasperreports/engine/JasperPrintManager.html#printPages(net.sf.jasperreports.engine.JasperPrint,%20int,%20int,%20boolean

mas te adiantando os parâmetros significa:

(JasperPrint arg0, int arg1, int arg2, boolean arg3)

JasperPrint = você passa o arquivo que gera o resultado para ser impresso:
//JasperPrint impressao = JasperManager.fillReport( “C:\XPTO.jasper” … ) ;

arg1 = página inicial
arg2 = páginal final
arg3 = indica se quer envio direto pra impressoa (coloque false) ou se quer que abra a caixa de diálogo (coloque true).

JasperPrint impressao = JasperFillManager.fillReport(faturaSIAFIsim_all.jasper", params, jrRS); 
	       
  int finalPag = impressao.getPages().size() - 1;  
	          
 JasperPrintManager.printPages(impressao, 0 , finalPag ,false);  

error:

net.sf.jasperreports.engine.JRException: Invalid page index range : 0 - -1 of 0 at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:125) at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:86) at net.sf.jasperreports.engine.JasperPrintManager.printPages(JasperPrintManager.java:354) at br.gov.in.inf.modulo.relatorioFatura.report.ImprimirFatura.imprimirFatura(ImprimirFatura.java:159) at br.gov.in.inf.modulo.fatura.apresentacao.GerenciaFaturaAction.imprimirFatura(GerenciaFaturaAction.java:442) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274) at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at br.gov.in.inf.filtro.NavegacaoPrincipalFiltro.doFilter(NavegacaoPrincipalFiltro.java:47) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447) at java.lang.Thread.run(Unknown Source)

Parece que o relatório está sem páginas. Tem certeza que o datasource informado tem dados para alimentar o relatório.