昨天看到安卓QQ有直接打印资料的功能,看了一下iOS的,没有看到,于是查了一下iOS打印的资料
原理
在iOS里边打印主要是用到了UIPrintInteractionController类,这是一个单列类。UIPrintInfo是配置打印信息,UISimpleTextPrintFormatter是设置页面范围。
具体实现
打印textview文本文字
打印文本
//为打印做准备,创建一个指向sharedPrintController的引用
UIPrintInteractionController *printer = [UIPrintInteractionController sharedPrintController];
printer.delegate = self;
//配置打印信息
UIPrintInfo *Pinfo = [UIPrintInfo printInfo];
Pinfo.outputType = UIPrintInfoOutputGeneral;//可打印文本、图形、图像
Pinfo.jobName = @"Print for xiaodui";//可选属性,用于在打印中心中标识打印作业
Pinfo.duplex = UIPrintInfoDuplexLongEdge;//双面打印绕长边翻页,NONE为禁止双面
Pinfo.orientation = UIPrintInfoOrientationPortrait;//打印纵向还是横向
// Pinfo.printerID = @"";//指定默认打印机,也可以使用UIPrintInteractionControllerDelegate来知悉
printer.printInfo = Pinfo;
//设置页面范围
UISimpleTextPrintFormatter *textFormatter = [[UISimpleTextPrintFormatter alloc] initWithText:self.textView.text];
textFormatter.startPage = 0;//指定从哪一张开始打印0代表第一张
textFormatter.contentInsets = UIEdgeInsetsMake(36, 36, 36, 36);//72相当于1英寸,这样设置上下左右的边距都为0.5英寸
textFormatter.maximumContentWidth = 504;//(72x7.5)相当于打印宽度为7英寸
printer.printFormatter = textFormatter;
printer.showsPageRange = YES;
[printer presentAnimated:YES completionHandler:^(UIPrintInteractionController * _Nonnull printInteractionController, BOOL completed, NSError * _Nullable error) {
if (!completed && error) {
NSLog(@"Error");
}
}];
2.打印渲染的HMTL
打印HTML
注意点:其他都跟打印文本的一样,只不过HTML用到了
UIMarkupTextPrintFormatter。
NSURL *requestURL = [[self.webView request] URL];
NSError *error = nil;
NSString *contentHTML = [NSString stringWithContentsOfURL:requestURL encoding:NSASCIIStringEncoding error:&error];
UIMarkupTextPrintFormatter *textFormmatter = [[UIMarkupTextPrintFormatter alloc] initWithMarkupText:contentHTML];
3.打印PDF
PDF说白了就是image,打印PDF就是打印image。
UIGraphicsBeginImageContext(self.webView.bounds.size);
[self.webView.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
printer.printingItem = image;
这句话的意思就是拿到要打印的空间的大小,然后将内容转化成image就OK了。