项目中要求tableView的截图,转为Data,并用AirPrint 打印出来,特地总结一下
tableView截图
<pre>
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
}
</pre>
image使用AirPrint打印
<pre>
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 })
</pre>
此时就会弹出打印页面,但是系统自带的显示的是英文此时需要修改
修改语言info.plist
中的文件,将en
改为China
网友评论