iOS 后臺無UI交互打印

iOS airPrint有交互打印
http://www.lxweimin.com/p/f5863a1833d0

需求無交互打印(實現靜默打印)
1.與有交互打印的唯一區別,就是不彈出讓用戶點print的界面

交互界面.png

2.選擇打印機的頁面是必不可少的(至少進行一次)

選擇打印機

3.將用戶選擇的打印機信息,存儲到本地,下次直接調用

//選擇打印機
- (void)selectPrinterPicker{
    UIPrinterPickerController *pickerController =[UIPrinterPickerController printerPickerControllerWithInitiallySelectedPrinter:nil];
    
    CGRect rect;
   
    rect = CGRectMake(0 , 0, 0, 0);
    [pickerController presentFromRect:rect inView:self.view animated:YES completionHandler:^(UIPrinterPickerController *controller, BOOL userDidSelect, NSError *err){
        if (userDidSelect)
        {
            //建議本地化存儲,下次直接打印
            [self.dic setValue:controller.selectedPrinter.URL.absoluteString forKey:@"printUrl"];
            [self.dic setValue:controller.selectedPrinter.displayName forKey:@"printName"];

            NSLog(@"Selected printer:%@", controller.selectedPrinter.displayName);
        }
    }];
}

4.最重要的步驟就是打印了,打印前需要判斷,之前存儲的打印機是否還可以鏈接,可以連接直接打印,沒有的話提示

//網頁
- (void)printWebPage:(id)sender
{
    NSLog(@"%@",[[NSUserDefaults standardUserDefaults] objectForKey:@"printUrl"]);
//    UIPrinter *airPrint = [UIPrinter printerWithURL:[NSURL URLWithString:[[NSUserDefaults standardUserDefaults] objectForKey:@"printUrl"]]];
    
    NSLog(@"%@", self.dic);
    
    UIPrinter *airPrintDic = [UIPrinter printerWithURL:[NSURL URLWithString:[self.dic objectForKey:@"printUrl"]]];
    
    
    if (nil == airPrintDic.URL) {
        NSLog(@"暫無打印機");
        [self selectPrinterPicker];
        return;
    }
    
    [airPrintDic contactPrinter:^(BOOL available)
     {
         if (available)
         {
             NSLog(@"AIRPRINTER AVAILABLE");
             UIPrintInteractionController *controller = [UIPrintInteractionController sharedPrintController];
             if(!controller){
                 NSLog(@"Couldn't get shared UIPrintInteractionController!");
                 return;
             }
             
             UIPrintInteractionCompletionHandler completionHandler =
             ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
                 if(!completed && error){
                     NSLog(@"FAILED! due to error in domain %@ with error code %ld", error.domain, (long)error.code);
                 }
             };
             
             
             // Obtain a printInfo so that we can set our printing defaults.
             UIPrintInfo *printInfo = [UIPrintInfo printInfo];
             // This application produces General content that contains color.
             printInfo.outputType = UIPrintInfoOutputGrayscale;
             // We'll use the URL as the job name.
             printInfo.jobName = @"";
             // Set duplex so that it is available if the printer supports it. We are
             // performing portrait printing so we want to duplex along the long edge.
             printInfo.duplex = UIPrintInfoDuplexLongEdge;
             // Use this printInfo for this print job.
             controller.printInfo = printInfo;
             
             // Be sure the page range controls are present for documents of > 1 page.
             controller.showsPageRange = YES;
             
             //是否打印多份
             //    controller.showsNumberOfCopies = NO;
             
             // This code uses a custom UIPrintPageRenderer so that it can draw a header and footer.
             APLPrintPageRenderer *myRenderer = [[APLPrintPageRenderer alloc] init];
             myRenderer.jobTitle = printInfo.jobName;
             UIViewPrintFormatter *viewFormatter = [self.myWebView viewPrintFormatter];
             
             [myRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];
             // Set our custom renderer as the printPageRenderer for the print job.
             controller.printPageRenderer = myRenderer;
             
             [controller printToPrinter:airPrintDic completionHandler:completionHandler];
         }
         else
         {
             NSLog(@"AIRPRINTER NOT AVAILABLE");
             [self selectPrinterPicker];
         }
     }];
}

5.使用時,直接根據自己的業務,導入這倆個方法,調用打印時,調用4的方法即可(實現的是打印網頁里面的內容)!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容