Java打印服务API和非默认打印机

时间:2017-11-28 12:30:52

标签: java printing java-print

所以我有一个将任务发送到打印机的应用程序。如果我发送任务的打印机设置为“默认打印机”,一切正常,当我更改默认打印机并尝试再次将任务发送到同一台打印机时,这已经不是默认打印机了,我得到以下图片:通过java,它找到正确的打印机,发送任务,并在打印队列中状态更改如下 - 后台打印,打印并发送到打印机。几秒后发送到打印机状态消失,没有任何反应,没有错误,没有。看着我的代码,我真的看不出任何问题。它找到了所有正确的东西,我不确定在哪里寻找解决方案,以及在这里提供哪些代码片段,以使图片更清晰。

它肯定能够正确理解这一点:

private void sendDataToPrinter(PrinterContent printerContent) {
    //Get available printers
    PrintService[] printServices = Constants.PRINT_SERVICES;

    //Look for right printer and print data
    for (int i = 0;  i < printServices.length; i++) {

        if (printServices[i].getName().equals(printerContent.getPrinterName())) {
            print(printServices[i], printerContent);
            break;
        }
    }
}

这是打印方法:

private void print(PrintService printer, PrinterContent printerContent) {

    Document htmlDocument = ConverterUtil.convertStringToHtmlDocument(printerContent.getPrintContent());
    PDDocument pdfDocument = ConverterUtil.convertHtmlToPdf(htmlDocument);
    PrinterJob printJob = createPDFPrinterJob(pdfDocument);

    try {
        printJob.setPrintService(printer);
        printJob.print();
    }
    catch(PrinterException ex) {
        ex.printStackTrace();
    }
}

createPDFPrinterJob方法:

private PrinterJob createPDFPrinterJob(PDDocument pdfDocument) {

    PrinterJob printJob = PrinterJob.getPrinterJob();

    PageFormat pageFormat = printJob.defaultPage();
    pageFormat.setOrientation(PageFormat.PORTRAIT);

    pageFormat.setPaper(PrinterJob.getPrinterJob().defaultPage().getPaper());

    try {
        printJob.setPrintable(new PDPageable(pdfDocument), pageFormat);
    }
    catch(PrinterException ex) {
        ex.printStackTrace();
    }

    return printJob;
}

0 个答案:

没有答案