将pdf jasper直接发送到网络应用程序中的打印机

时间:2015-11-05 10:57:07

标签: java jasper-reports

我需要将pdf jasper直接发送到打印机,当前代码PDF被委托给浏览器,因此用户可以根据需要打印任意数量的副本。必须只允许打印一份,所以我想我会直接发送到打印。 我搜索了论坛,但不明白这个问题的最佳解决方案是什么。

看看我的代码:

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

}

2 个答案:

答案 0 :(得分:0)

如果有问题,您希望通过网络应用程序 browser将报告直接发送给用户的打印机。

这可以完成!,无法直接从浏览器控制网络用户打印机(不包括使用activeX或其他自制插件)

可能这是运气,因为否则在互联网上导航时,人们会在打印机上打印很多广告......

如果您希望将其发送到附加到服务器的打印机,则可以完成此操作!

如果是服务器打印机,请告诉我,我可以为您传递一些代码。

答案 1 :(得分:0)

如果客户&服务器PC在同一网络即LAN上,您可以在服务器上共享客户端的打印机,然后向您发送报告,就像您发送到本地安装的打印机一样。