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的方法即可(實現的是打印網頁里面的內容)!