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

Java Service Printer API Documentation

我已经看到了其他一些选项,比如使用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<String> 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());
    }
}

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