2012-10-30 19 views
6

Zbieram potencjalną aplikację dla klienta, a ja miałem pytanie, na które nie byłem w stanie znaleźć odpowiedzi. To, co chciałbym zrobić, to drukować automatycznie, bez konieczności wyświetlania UIPrintInteractionController. Ważnym punktem, który powinienem zrobić jest to, że nie będzie być aplikacją produkcyjną. Wiem, że w przeciwnym razie może to naruszyć prywatność użytkownika, aby drukować bez zgody użytkownika, ale znowu nie będzie to aplikacja publiczna w App Store. Jedna aplikacja, którą udało mi się znaleźć, to Printer Pro. Użytkownik zostanie poproszony o wydrukowanie strony testowej, a strona zostanie wydrukowana bez pojawienia się UIPrintInteractionController - ta aplikacja jest w sklepie, więc zakładam, że istnieje legalny sposób na jej wykonanie. Czy ktoś wie, jak to się robi?Wydruk iOS bez zezwolenia UIPrintInteractionController na wyświetlenie

+0

Czy kiedykolwiek otrzymasz odpowiedź na to pytanie? –

+0

Niestety, nie. Oto odpowiedni link http://stackoverflow.com/questions/5135781/ipad-iphone-printing-direct-to-a-network-printer-without-airprint-popover?rq=1 – coder

Odpowiedz

5

O ile mi wiadomo, nie można drukować w systemie iOS7 bez wywoływania UIPrintInteractionController i wyświetlania okna dialogowego drukowania systemu.

Jednak iOS8 zapewnia teraz możliwość drukowania bezpośrednio na wydruku bez wyświetlania okna dialogowego. Podstawową ideą jest uzyskanie obiektu UIPrinter i użycie go w połączeniu z nową metodą - printToPrinter:completionHandler: do drukowania bez pokazywania okna dialogowego.

Uzyskanie obiektu UIPrinter dla drukarki można zrealizować na kilka sposobów.

Najprostszym jest użycie nowego UIPrinterPickerController. Ale pokazałoby to okno dialogowe i nie spełnia Twoich potrzeb. Możliwe jest utworzenie drukarki za pomocą adresu URL za pomocą metody . Nie do końca wiadomo, jak uzyskać ten adres URL, ale może on być zawarty na stronach administracyjnych HTML drukarki. Wierzę, że można go uzyskać programowo za pomocą interfejsu API Bonjour. Więcej informacji tutaj:

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/NetServices/Introduction.html#//apple_ref/doc/uid/10000119i

Bonjour jest usługą odkrycie API, który obejmuje wykrywanie drukarek IPP, którego to protokół używany przez AirPrint.

Jeśli chodzi o to, w jaki sposób aplikacja Printer Pro może drukować bez okna dialogowego w iOS7, domyślam się, że wchodzą one w interakcję z drukarką na bardzo niskim poziomie (np. Nieprzetworzone posty HTTP itp.).

+0

To działa dobrze, pozornie z wyjątkiem drukarki współdzielone przez kubki (np. na ubuntu). Na przykład nie mogę drukować na żadnej z dwóch drukarek udostępnionych przez Ubuntu/CUPS za pośrednictwem printToPrinter: w mojej aplikacji, ale moja aplikacja może drukować bezpośrednio na moich 2 drukarkach Canon CP910. W tym samym czasie natywna aplikacja Zdjęcia może drukować na moich 2 drukarkach udostępnianych przez ubuntu/CUPS. Więc nie wszystko działa z printToPrinter: – xaphod

+0

Aktualizacja: rozwiązaniem, które znalazłem, jest przechowywanie zarówno adresu URL do drukarki, jak i silnego odniesienia do UIPrintera. Jeśli adres URL nie może być połączony, spróbuj bezpośrednio UIPrintera.Niepokojąco to działa ... wygląda jak błąd w systemie iOS 8, ponieważ nie ma powodu, dla którego adres URL nie może być używany AFAIK – xaphod

0

Wykonaj poniższe kroki, aby wydrukować dokumenty bez monitowania ..

First Search for Devices Korzystanie poniższy kod ...

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. 

       NSURL *printerURL = printerPicker.selectedPrinter.URL; 

       NSLog(@"printerURL--->%@",printerURL.absoluteString); 

       NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
       [defaults setObject:[printerURL absoluteString] forKey:@"printURL"]; 
       [defaults synchronize]; 
      } 
    }]; 
} 

i drukować dokumenty bez monitowania użytkownika za pomocą poniższego kodu. ..

if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

    UIPrinter *currentPrinterObj = [UIPrinter printerWithURL:[NSURL URLWithString:[defaults stringForKey:[defaults stringForKey:@"printURL"]]]]; 

    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

Edytuj wpis i wstaw wcięcie kodu (przycisk kodu) –

Powiązane problemy