Печать с iPad/iPhone напрямую на сетевой принтер без всплывающего окна Airprint

Я разрабатываю приложение для iPad/iPhone, которое требует распечатки квитанции на сетевом принтере после завершения транзакции. Мне удалось заставить функциональность Airprint работать в некоторой степени, так как я могу заставить всплывающее окно UIPrintInteractionController отображаться соответствующим образом, нажать кнопку «Печать», а затем просмотреть результаты в Симуляторе принтера. Из-за требований моего приложения я надеюсь пропустить шаг всплывающего окна и автоматически распечатать квитанцию, когда я закрою транзакцию. Другими словами, возможно ли отправить задание на печать на предварительно указанный сетевой принтер без добавления дополнительной кнопки? Нужно ли мне пытаться расширить класс UIPrintInteractionController? Если да, то кому-нибудь повезло с этим подходом?

Любые другие альтернативные рекомендации также были бы замечательными.


person T. S.    schedule 27.02.2011    source источник
comment
Нашли ли вы какое-либо решение для этого вопроса?   -  person Alexandre OS    schedule 15.06.2011
comment
Я также ищу такой же функционал. кто-нибудь понял это.   -  person Rajashekar    schedule 26.07.2011
comment
@Rajashekar, наконец, ты нашел какой-нибудь способ сделать это?   -  person    schedule 22.09.2014


Ответы (3)


Невозможно сделать это с помощью класса UIPrintInteractionController, он предназначен для предоставления пользователю стандартных параметров печати, и в магазине приложений нет безопасного способа обойти это.

person Tark    schedule 25.02.2012
comment
и есть ли какой-нибудь небезопасный способ сделать это в магазине приложений? - person ; 22.09.2014

попробуй это

  - (IBAction)Print:(id)sender {
    [self searchForPrinters];
   }
 - (void) searchForPrinters
  {

  if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1)
  {
         UIPrinterPickerController *printPicker = [UIPrinterPickerController   printerPickerControllerWithInitiallySelectedPrinter:nil];
    [printPicker presentAnimated:YES completionHandler:
     ^(UIPrinterPickerController *printerPicker, BOOL userDidSelect,    NSError *error)
         {
         if (userDidSelect)
           {
             //User selected the item in the UIPrinterPickerController and got the printer details.

             [UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:printerPicker.selectedPrinter];

             //Here you will get the printer and printer details.ie,
             // printerPicker.selectedPrinter, printerPicker.selectedPrinter.displayName, printerPicker.selectedPrinter.URL etc. So you can display the printer name in your label text or button title.

             [btnSettingsPrint setTitle:printerPicker.selectedPrinter.displayName forState:UIControlStateNormal];

             NSURL *printerURL = printerPicker.selectedPrinter.URL;

         }
     }];
}
 }

 -(void)printYourItem :(NSData*)data
 {
 if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1)
  {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    UIPrinter *currentPrinterObj = [UIPrinter printerWithURL:[NSURL URLWithString:[defaults stringForKey:@"YouKeys"]]];

    UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];

    if(currentPrinterObj)
    {
        [controller printToPrinter:currentPrinterObj completionHandler:^(UIPrintInteractionController *printController, BOOL completed, NSError *error)
         {
             if(completed)
             {
             }
             else
             {
                 NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
             }
         }];
    }
}
}
person Erinson Villarroel    schedule 09.08.2015

Есть выход

#import <BRPtouchPrinterKit/BRPtouchPrinterKit.h> 

BRPtouchPrinterKit — это платформа для принтеров Brother. Подробнее здесь: http://www.brother.com/product/dev/mobile/ios/

Является SDK специально для этого типа принтера

person Erinson Villarroel    schedule 09.08.2015