AirPrint:iOS的打印机

昨天看到安卓QQ有直接打印资料的功能,看了一下iOS的,没有看到,于是查了一下iOS打印的资料

原理


在iOS里边打印主要是用到了UIPrintInteractionController类,这是一个单列类。UIPrintInfo是配置打印信息,UISimpleTextPrintFormatter是设置页面范围。



具体实现

  1. 打印textview文本文字
AirPrint:iOS的打印机_第1张图片
打印文本
//为打印做准备,创建一个指向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

AirPrint:iOS的打印机_第2张图片
打印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了。

你可能感兴趣的:(AirPrint:iOS的打印机)