我使用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());
}
}
只有在服务器上安装并选择打印机作为默认打印机时,此方法才有效 .