2015-11-05 4 views
0

Мне нужно отправить pdf-jasper непосредственно на принтер, текущий код PDF делегирован браузеру, и поэтому пользователь может печатать как можно больше копий. Должна разрешить печатать только одну копию, поэтому я решил отправить ее непосредственно на печать. Я искал форум, но не понял, что будет лучшим решением проблемы.Отправить pdf jasper прямо на принтер в веб-приложении

Посмотрите на мой код:

public class UtilRelatorios { 

public static void imprimeRelatorio(String relatorioNome, 
     HashMap parametros) throws IOException, JRException { 
     FacesContext fc = FacesContext.getCurrentInstance(); 
     ServletContext context = (ServletContext) fc.getExternalContext().getContext(); 
     HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); 
     JasperPrint jasperPrint = 
       JasperFillManager.fillReport(
         context.getRealPath("/relatorios")+ File.separator+relatorioNome+".jasper", 
         parametros);  
     //int finalPag = jasperPrint.getPages().size(); 
     //System.out.println("page: "+finalPag); 
     //JasperPrintManager.printPage(jasperPrint,finalPag,false); 
     byte[] b = null; 
     //JasperPrintManager.printPage(jasperPrint, 0, false); 

     try { 
      b = JasperExportManager.exportReportToPdf(jasperPrint); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 
     }  

      if (b != null && b.length > 0) { 
       // Envia o relatório em formato PDF para o browser 
       response.setContentType("application/pdf"); 
       int codigo = (int) (Math.random()*1000); 
       response.setHeader("Content-disposition","inline);filename=relatorio_"+codigo+".pdf"); 
       response.setContentLength(b.length); 
       ServletOutputStream ouputStream = response.getOutputStream(); 
       ouputStream.write(b, 0, b.length); 
       ouputStream.flush(); 
       ouputStream.close(); 
      } 
} 

}

ответ

0

Если, как кажется, в вопросе вы хотите отправить отчет непосредственно к принтеру пользователя через веб-приложение , browser.

Это может не быть сделано !, вы не может управлять принтером для веб-пользователей непосредственно из браузера (за исключением использования ActiveX или другого дома из плагинов)

Вероятно, это удача, так как в противном случае Во время навигации в Интернете вы есть люди, печатающие много рекламы на вашем принтере ....

Если вместо этого вы хотите, чтобы отправить его на принтер прикрепленным к серверу, это может быть сделано!

Если у вас есть серверный принтер, сообщите мне, и я могу передать вам код.

+0

Я хочу отправить непосредственно на принтер по умолчанию на клиентской машине. Поскольку я не могу контролировать его через ваш браузер, думал иначе: * Пользователь нажимает печать * Если Ф во временную папку * Направлен на принтер по умолчанию, а затем исключить файл каталог Может ли вы помочь мне с это? – csf

+0

Только один способ гарантировать, что пользователь будет печатать только один раз, будет заключаться в том, что вы разрабатываете какой-то активныйX или другой плагин ... java web start ... –

+0

Я разработал апплет для печати отчета, но я не могу работать в браузере дает ошибку, не поддерживаемую плагином, вы можете помочь мне по проблеме http://stackoverflow.com/questions/33735509/applet-running-in-chrome – csf

0

Если клиентский сервер & находится в той же сети, то есть в локальной сети, вы можете совместно использовать клиентский принтер на сервере, а затем отправлять ему отчет так же, как вы отправляете на локально установленный принтер.

+0

Но что не помогает OP вообще –

Смежные вопросы