我需要将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();
}
}
}
答案 0 :(得分:0)
如果有问题,您希望通过网络应用程序 browser
将报告直接发送给用户的打印机。
这可以不完成!,无法直接从浏览器控制网络用户打印机(不包括使用activeX或其他自制插件)
可能这是运气,因为否则在互联网上导航时,人们会在打印机上打印很多广告......
如果您希望将其发送到附加到服务器的打印机,则可以完成此操作!
如果是服务器打印机,请告诉我,我可以为您传递一些代码。
答案 1 :(得分:0)
如果客户&服务器PC在同一网络即LAN上,您可以在服务器上共享客户端的打印机,然后向您发送报告,就像您发送到本地安装的打印机一样。