tableView 屏幕截图并使用AirPrint打印

项目中要求tableView的截图,转为Data,并用AirPrint 打印出来,特地总结一下

tableView截图


func imageFromTableView(tableView: UITableView) -> UIImage {

    var image = UIImage()
    //开上下文
    UIGraphicsBeginImageContextWithOptions(tableView.contentSize, tableView.isOpaque, 0.0)
    //保存frame
    let savedContentOffset = tableView.contentOffset
    let savedFarme = tableView.frame
    //设置tableView在画布的位置和大小
    tableView.contentOffset = .zero
    tableView.frame = CGRect(x: 0, y: 0, width: tableView.contentSize.width, height: tableView.contentSize.height)
    // 开始画
    tableView.layer.render(in: UIGraphicsGetCurrentContext()!)
    //生成图片保存在image中
    image = UIGraphicsGetImageFromCurrentImageContext()!
    //还原tableView的frame
    tableView.contentOffset = savedContentOffset
    tableView.frame = savedFarme
    //关闭上下文
    UIGraphicsEndImageContext()
    
    return image
}

image使用AirPrint打印


let pic = UIPrintInteractionController.shared // 创建控制器
let printInfo = UIPrintInfo.printInfo() // 打印机配置

// UIPrintInfoOutputType:给 UIKit 提供要打印内容的类型提示。可以是以下任意一个:
// .General(默认):文本和图形混合类型;允许双面打印。
// .Grayscale:如果你的内容只包括黑色文本,那么该类型比 .General 更好。
// .Photo:彩色或黑白图像;禁用双面打印,更适用于图像媒体的纸张类型。
// .PhotoGrayscale:对于仅灰度的图像,根据打印机的不同,该类型可能比 .Photo 更好。
printInfo.outputType = .general
pic.printInfo = printInfo
pic.showsNumberOfCopies = false //让用户选择打印范围,只在多页的时候有用
pic.printingItem = image // 输入源
//ipad 的调用方式
pic.present(from: rect, in: inView, animated: true, completionHandler: { (pick, isSuccess, error) in

        })

// iphone 的调用方式
// pic.present(animated: true, completionHandler: { (pick, isSuccess, error) in })

此时就会弹出打印页面,但是系统自带的显示的是英文此时需要修改info.plist中的文件,将en改为China

修改语言

你可能感兴趣的:(tableView 屏幕截图并使用AirPrint打印)