DocPrintJob在随机主机上打印空白页

时间:2018-10-24 09:37:52

标签: java javafx printing java-print

我在各种主机和打印机上打印包含一些标签的PDF时遇到问题。在某些主机上,我的应用程序打印了许多空白页,但在其他主机上,一切正常。我不知道为什么。我没有任何空异常或其他任何东西。

  • 在装有Linux和带有网络打印机的JRE10的主机上,我的应用程序正常运行。它正在完美地打印一张A4页。
  • 在与上述主机相同的主机上,但在Windows 7和JRE10上(我也尝试使用JRE8,但仍然没有尝试),并且同一台网络打印机上,我的应用程序正在打印许多空白/空白页面。 (与上述网络,打印机和主机相同)
  • 所以我测试了另一台带有JRE10和上述网络打印机的Windows 10主机。应用正在打印许多空白/空白页。
  • 在其他装有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";
}

0 个答案:

没有答案