iOS print without allowing UIPrintInteractionController to appear

前端 未结 2 596
抹茶落季
抹茶落季 2020-12-03 09:05

I am researching a potential app for a client, and I had a question I wasn\'t able to find the answer on. What I would like to do is print automatically, without having the

相关标签:
2条回答
  • 2020-12-03 09:32

    As far as I know it is not possible to print in iOS7 without invoking the UIPrintInteractionController and displaying the system print dialog.

    However, iOS8 now provides a provision for printing directly to a print without showing the dialog. The basic idea is that you obtain a UIPrinter object and use this in conjunction with the new - printToPrinter:completionHandler: method of the UIPrintInteractionController to print without showing the dialog.

    Obtaining the UIPrinter object for your printer can be accomplished in a couple of ways.

    The most straightforward is to use the new UIPrinterPickerController. But this would show a dialog and so doesn’t meet your needs.

    The alternative is to create a printer via its URL using the UIPrinter method + printerWithURL:. I’m not entirely clear how to obtain this URL but it may be contained in the printer’s HTML admin pages. And I believe you can obtain it programmatically using the Bonjour API. More info here:

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

    Bonjour is a service discovery API which includes discovery of IPP printers, which the is the protocol used by AirPrint.

    As for how the Printer Pro app is able to print without a dialog in iOS7, I would guess they are interacting with the printer at a very low level (e.g. raw HTTP posts, etc.).

    0 讨论(0)
  • 2020-12-03 09:44

    Follow these steps to Print the Documents without prompting..

    First Search for Devices Using the Below Code...

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

    And Print the Documents by without prompting by using the below code...

    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 讨论(0)
提交回复
热议问题