iOS打印不允许UIPrintInteractionController出现

我正在为客户研究一个潜在的应用程序,我有一个问题,我无法find答案。 我想要做的是自动打印,而不显示UIPrintInteractionController 。 我应该做的重要一点是这不会是一个生产应用程序。 我知道,否则这可能会违反用户的隐私,只需在用户的同意下进行打印,但这又不会成为App Store上的公共应用程序。 我发现一个应用程序,似乎能够这个是Printer Pro 。 用户被提示打印一个testing页面,页面打印时不显示UIPrintInteractionController – 这个应用程序在商店,所以我假设有一个合法的方法来做到这一点。 任何人都知道这是如何做到的?

据我所知,如果不调用UIPrintInteractionController并显示系统打印对话框,就不可能在iOS7中打印。

但是,iOS8现在提供了直接打印到打印而不显示对话框的规定。 其基本思路是获得UIPrinter对象,并将其与- printToPrinter:completionHandler:的new - printToPrinter:completionHandler:方法结合使用,而不显示对话框进行打印。

为您的打印机获取UIPrinter对象可以通过几种方法来完成。

最直接的是使用新的UIPrinterPickerController 。 但这会显示一个对话框,所以不能满足您的需求。

另一种方法是使用UIPrinter方法+ printerWithURL:通过URL创build打印机。 我不完全清楚如何获取这个URL,但它可能包含在打印机的HTMLpipe理页面中。 我相信你可以使用Bonjour API以编程方式获得它。 更多信息:

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

Bonjour是一个服务发现API,其中包括发现IPP打印机,这是AirPrint使用的协议。

至于如何打印机临应用程序能够打印没有在iOS7对话框,我猜测他们正在打印机在一个非常低的水平(例如原始的HTTPpost等)交互。

按照下列步骤在不提示的情况下打印文档。

首先使用下面的代码search设备…

 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]; }]; 

并通过使用下面的代码没有提示打印文档…

  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); } }]; } }