java windows 打印机_使用Java中的客户端计算机打印机(不是部署应用程序的服务器)进行打印...

我使用Spring开发了一个使用Java 8的应用程序 . 用户故事是客户端应该选择要打印的许多文档(PDF),然后按一个按钮并将它们全部打印到默认的客户端机器打印机(浏览器中的Ctrl P功能在尝试打印时遇到问题't accomplish this requirement). But, I' m CLIENT MACHINE 打印机使用Java Service Printer API . 根据文档,JPS API也应该在客户端运行(据我所知),但我不能使这个工作:

我已经看到了其他一些选项,比如使用Applet,但这个选项在浏览器的浏览版本中被阻止(至少在Chrome中) .

如果还有其他替代方案,请告诉我如何实施它们:

这是我正在使用的代码:

@GetMapping(value = Constantes.IMPRIMIR_FACTURA)

@CrossOrigin(origins = "*")

public void imprimirFacturas(@PathVariable("fechaFacturacion") String fechaFacturacion,

@RequestParam("polizas") String polizas,

@RequestParam("ordenarPor") String ordenarPor,

@RequestParam("directorId") String directorId,

@RequestParam("gerenteId") String gerenteId,

@RequestParam("intermediarioId") String intermediarioId,

@RequestParam("frecuenciaDePagoId") String frecuenciaDePagoId,

@RequestParam(value = "imprimePortada", defaultValue = "false") String imprimePortada,

@RequestParam(value = "imprimeDetalle", defaultValue = "false") String imprimeDetalle,

@RequestParam(value = "imprimeMovimientos", defaultValue = "false") String imprimeMovimientos,

HttpServletResponse response) throws IOException {

String[] split = polizas.split(",");

String ordenByDelReporte = determinarOrden(ordenarPor);

try {

List polizasString = Arrays.asList(split);

PrintService printService = PrintServiceLookup.lookupDefaultPrintService();

boolean efectuarImpresion = false;

if (Objects.isNull(printService))

throw new PrinterAbortException("No existe impresora por defecto.");

for (String numeroPoliza : polizasString) {

FacturaDto facturaDto = new FacturaDto()

.imprimePortada(imprimePortada).imprimeDetalle(imprimeDetalle).imprimeMovimientos(imprimeMovimientos)

.ordenarPor(ordenByDelReporte).conFechaFacturacion(fechaFacturacion)

.numeroPoliza(numeroPoliza);

facturaDto.setDirectorId(directorId);

facturaDto.setGerenteId(gerenteId);

facturaDto.setIntermediarioId(intermediarioId);

facturaDto.setFrecuenciaDePagoId(frecuenciaDePagoId);

byte[] objPDF = generarPorPdf(facturaDto);

if (objPDF.length == Constantes.CERO)

continue;

efectuarImpresion = true;

Doc pdf = new SimpleDoc(objPDF, DocFlavor.BYTE_ARRAY.AUTOSENSE, null);

printService.createPrintJob().print(pdf, new HashPrintRequestAttributeSet());

}

if (!efectuarImpresion)

response.setStatus(333);

} catch (Exception e) {

LOGGER.error(Constantes.ERROR, e);

response.sendError(500, e.getMessage());

}

}

只有在服务器上安装并选择打印机作为默认打印机时,此方法才有效 .

  • 0
    点赞
  • 0
    收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:数字20 设计师:CSDN官方博客 返回首页
评论

打赏作者

徐老师的幼教园

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值