DocPrintJob печать пустых страниц на случайных хостах - PullRequest
0 голосов
/ 24 октября 2018

У меня проблема с печатью PDF, содержащего несколько этикеток, на различных хостах и ​​принтерах.На некоторых хостах мое приложение печатает много пустых страниц, но на других все работает нормально.Я не могу понять почему.У меня нет нулевых исключений или чего-то еще.

  • на хосте с Linux и JRE10 с сетевым принтером, мое приложение работает правильно.Он отлично печатает одну страницу формата А4.
  • на том же хосте, что и выше, но на Windows 7 и JRE10 (я пробовал также с JRE8, все еще ничего) и на том же сетевом принтере мое приложение печатает много пустых / пустых страниц.(та же сеть, принтер и хост, как указано выше)
  • , поэтому я протестировал другой хост Windows 10 с JRE10 и тем же сетевым принтером, как указано выше.Приложение печатает много пустых / пустых страниц.
  • на другом хосте с Windows 7 и JRE8, но на другом сетевом принтере мое приложение печатает правильно этикетки.Он отлично печатает одну страницу формата A4.
  • на другом хосте с Windows 7 и JRE8, а другое приложение сетевого принтера печатает пустые страницы.

В чем может быть проблема?Это нестабильная JRE или мой код неверен?

Код:

public static String printPdf(byte[] pdf){
    log.debug("printPdf(byte["+pdf.length+"])");
    log.info("All printers:"+ Printer.getAllPrinters());

    PrinterJob printerJob = PrinterJob.createPrinterJob();

    if(printerJob==null){
        log.warn("No priters were found in system");
        return "[E:2]";
    }

    Printer printer = null;
    if(printerJob.showPrintDialog(null))
    {
        log.info("Selected printer " + printerJob.getPrinter().getName());
        printer = printerJob.getPrinter();
    }

    DocFlavor docType = DocFlavor.INPUT_STREAM.AUTOSENSE;

    PrintRequestAttributeSet aset = new HashPrintRequestAttributeSet();
    aset.add(MediaSizeName.ISO_A4);
    PrintService[] pservices = PrintServiceLookup.lookupPrintServices(null, aset);
    String pserv = Arrays.stream(pservices).map(printService -> printService.getName()).collect(Collectors.joining(", "));
    log.debug("Available print services:" + pserv);

    DocPrintJob docPrintJob = null;

    for(PrintService ps : pservices){
        log.debug("PrintSevice: "+ps.getName());
        if(ps.getName()==printer.getName()){
            log.info("Serviece for a printer was founded");
            docPrintJob = ps.createPrintJob();
        }
    }
    if (docPrintJob!=null) {
        log.debug("Created DocPrintJob: " +docPrintJob.getAttributes().toString());
        try {
            Doc doc = new SimpleDoc(new ByteArrayInputStream(pdf), docType, null);
            log.info("Printing document");
            docPrintJob.print(doc, aset);
        } catch (PrintException e) {
            log.error("PrintException", e.getMessage(), e);
            return "[E:3]";
        }
    }else {
        log.error("Null DocPrintJob");
        return "[E:4]";
    }

    return "OK";
}
...