Enviar pdf para impressora (direto)

5 respostas
D

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

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();
	            }
	        }    
	 }

5 Respostas

J

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.

D

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

J

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 ?

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).

D
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)

F

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

Criado 10 de julho de 2009
Ultima resposta 10 de jul. de 2009
Respostas 5
Participantes 3