iPad / iPhone - печать напрямую на сетевой принтер без всплывающей рекламы - PullRequest
7 голосов
/ 27 февраля 2011

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

Также подойдут любые другие альтернативные рекомендации.

Ответы [ 3 ]

1 голос
/ 26 февраля 2012

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

0 голосов
/ 09 августа 2015

попробуйте

  - (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);
             }
         }];
    }
}
}
0 голосов
/ 09 августа 2015

Есть способ

#import <BRPtouchPrinterKit/BRPtouchPrinterKit.h> 

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

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

...