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以编程方式获得它。 更多信息:
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); } }]; } }