Looking for java Keywords? Try Ask4Keywords

Java Language Прослушивание статуса запроса на печать


пример

Для большинства клиентов печати чрезвычайно полезно знать, закончилось или не выполнено задание на печать.

API службы печати Java предоставляет некоторые функции для получения информации об этих сценариях. Все, что нам нужно сделать, это:

  • обеспечить реализацию интерфейса PrintJobListener и
  • зарегистрируйте эту реализацию на задании печати.

Когда состояние задания печати изменится, мы будем уведомлены. Мы можем сделать что угодно, например:

  • обновить пользовательский интерфейс,
  • начать другой бизнес-процесс,
  • записывать что-то в базе данных,
  • или просто запишите его.

В приведенном ниже примере мы записываем каждое изменение статуса задания на печать:

import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobListener;

public class LoggerPrintJobListener implements PrintJobListener {

    // Your favorite Logger class goes here!
    private static final Logger LOG = Logger.getLogger(LoggerPrintJobListener.class);


    public void printDataTransferCompleted(PrintJobEvent pje) {
        LOG.info("Print data transfer completed ;) ");
    }

    public void printJobCompleted(PrintJobEvent pje) {
        LOG.info("Print job completed =) ");
    }

    public void printJobFailed(PrintJobEvent pje) {
        LOG.info("Print job failed =( ");
    }

    public void printJobCanceled(PrintJobEvent pje) {
        LOG.info("Print job canceled :| ");
    }

    public void printJobNoMoreEvents(PrintJobEvent pje) {
        LOG.info("No more events to the job ");
    }

    public void printJobRequiresAttention(PrintJobEvent pje) {
        LOG.info("Print job requires attention :O ");
    }
}

Наконец, мы можем добавить нашу реализацию приемника задания печати на задание печати перед самим запросом на печать следующим образом:

DocPrintJob printJob = printService.createPrintJob();

printJob.addPrintJobListener(new LoggerPrintJobListener());

printJob.print(doc, pras);

Аргумент PrintJobEvent pje

Обратите внимание, что каждый метод имеет аргумент PrintJobEvent pje . Мы не используем его в этом примере для простоты, но вы можете использовать его для изучения состояния. Например:

pje.getPrintJob().getAttributes();

PrintJobAttributeSet экземпляр объекта PrintJobAttributeSet и вы можете запускать их по-каждому.


Другой способ достичь той же цели

Другим вариантом достижения той же цели является расширение класса PrintJobAdapter , как сказано в названии, является адаптером для PrintJobListener . Внедряя интерфейс, мы обязательно должны реализовать их все. Преимуществом этого метода является то, что нам нужно переопределить только те методы, которые мы хотим. Давайте посмотрим, как это работает:

import javax.print.event.PrintJobEvent;
import javax.print.event.PrintJobAdapter;

public class LoggerPrintJobAdapter extends PrintJobAdapter {

    // Your favorite Logger class goes here!
    private static final Logger LOG = Logger.getLogger(LoggerPrintJobAdapter.class);

    public void printJobCompleted(PrintJobEvent pje) {
        LOG.info("Print job completed =) ");
    }

    public void printJobFailed(PrintJobEvent pje) {
        LOG.info("Print job failed =( ");
    }
}

Обратите внимание, что мы переопределяем только некоторые конкретные методы.

Как и в примере реализации интерфейса PrintJobListener , мы добавляем слушателя к заданию на печать перед отправкой его на печать:

printJob.addPrintJobListener(new LoggerPrintJobAdapter());

printJob.print(doc, pras);