Прежде всего добавьте UIPrintInteractionControllerDelegate и создайте переменную
UIPrintInteractionController *printController;
Ниже код для печати всех изображений, документов, Excel, PowerPoint, PDF-файлов работает для меня:
[self printItem:SomeData withFilePath:YourFilePath];
В приведенном выше коде вы предоставляете NSData вашего документа / изображения и URL (filePath) и ниже, дополнительный код printItem: withFilePath: method
-(void)printItem :(NSData*)data withFilePath:(NSString*)filePath{
printController = [UIPrintInteractionController sharedPrintController];
printController.delegate = self;
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = [NSString stringWithFormat:@""];
printInfo.duplex = UIPrintInfoDuplexLongEdge;
printController.printInfo = printInfo;
printController.showsPageRange = YES;
//If NSData contains data of image/PDF
if(printController && [UIPrintInteractionController canPrintData:data]) {
printController.printingItem = data;
}else{
UIWebView* webView = [UIWebView new];
printInfo.jobName = webView.request.URL.absoluteString;
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL fileURLWithPath:filePath]]];
printController.printFormatter = webView.viewPrintFormatter;
}
void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
if (!completed && error) {
//NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
}
};
// Check wether device is iPad/iPhone , because UIPrintInteractionControllerDelegate has different methods for both devices
if([UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPad) {
[printController presentFromRect:self.view.frame inView:self.view animated:YES completionHandler:completionHandler];
}
else {
[printController presentAnimated:YES completionHandler:completionHandler];
}
}
Надеюсь, это поможет. Спасибо
// Для Swift и если вы хотите просто напечатать изображение
Сначала создайте IBoutlet для изображения
@IBOutlet var qrImage : UIImageView?
и затем по нажатию кнопки печати просто добавьте ниже код
//In your view controller
@IBAction func printButton(sender: AnyObject) {
let printInfo = UIPrintInfo(dictionary:nil)
printInfo.outputType = UIPrintInfoOutputType.general
printInfo.jobName = "My Print Job"
// Set up print controller
let printController = UIPrintInteractionController.shared
printController.printInfo = printInfo
// Assign a UIImage version of my UIView as a printing iten
printController.printingItem = self.qrImage?.image
// Do it
printController.present(from: self.view.frame, in: self.view, animated: true, completionHandler: nil)
}