UIPrintInteractionController печать на нескольких принтерах AirPrint - PullRequest
0 голосов
/ 03 января 2019

Одна действительно неприятная вещь, с которой я столкнулся, это невозможность печати на нескольких принтерах AirPrint одновременно.Не путайте это с распечаткой нескольких ЭЛЕМЕНТОВ на 1 принтер.

Пример:
У нас есть 3 принтера AirPrint.
Каждый принтер должен что-то распечатывать ... одинпосле другого.

Если вы уже получили свой объект UIPrinter, вы бы вызвали:

- (BOOL)printToPrinter:(UIPrinter *)printer 
 completionHandler:(UIPrintInteractionCompletionHandler)completion;

В методе завершения обычным процессом будет запуск следующей работы вМетод завершения так:

- (void)printAllJobs

    //  let's use an example printer url:
    UIPrinter *printer = [[UIPrinter alloc] initWithURL:[NSURL URLWithString:@"ipps://mycomputer.:863/printers/label"]];

    //  get the printer interaction controller:
    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];

    //  now print:
    [controller printToPrinter:printer completionHandler:^(UIPrintInteractionController * _Nonnull printInteractionController, BOOL completed, NSError * _Nullable error) {

        //  here.. you would check if the job is complete:
        if (completed) {

            //  print to the next printer:
            //  THIS METHOD GETS FIRED BUT DOESN'T ACTUALLY PRINT
            [self printToNextPrinter];

        }

    }

}

- (void)printToNextPrinter {

    //  create next printer:
    UIPrinter *nextPrinter = [[UIPrinter alloc] initWithURL:[NSURL URLWithString:@"ipps://mycomputer.:863/printers/roller"]];

    //  get controller:
    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];

    //  print:
    [controller printToPrinter:printer completionHandler:^(UIPrintInteractionController * _Nonnull printInteractionController, BOOL completed, NSError * _Nullable error) {

        //  this never gets executed.

    }

}

1 Ответ

0 голосов
/ 03 января 2019

Что я узнал :
Когда это происходит, происходит одна заметная вещь; на экране представлен UIAlertController с надписью «Печать в ... ххх», который показывает ход печати. ​​

Решение
Решение состоит в том, чтобы проверять каждые 2 секунды, чтобы увидеть, есть ли на экране предупреждение. Если так, повторите тот же метод, если нет, запустите следующее задание на печать. Похоже, что Apple не разрешает фоновую печать без предупреждений, так что это единственный способ ... кроме погружения в CUPS, что было бы беспорядком.

...