iOS 将WKWebView内的HTML打印为PDF
使用的webview为WKWebView,核心部分代码(Swift 4):
// 创建打印渲染
let printPageRenderer:PDFRender = PDFRender()
// 获取渲染格式
let viewFormatter:UIViewPrintFormatter = webView.viewPrintFormatter()
// 设置渲染格式
printPageRenderer.addPrintFormatter(viewFormatter, startingAtPageAt: 0)
// 将HTML渲染为PDF
let pdfData:NSData = printPageRenderer.drawPDF()
// 输出文件
let pdfFilename:String = "\(NSHomeDirectory())/Documents/test.pdf"
// 保存
pdfData.write(toFile: pdfFilename, atomically: true)
// 获取文件的保存位置
let url = URL.init(fileURLWithPath: pdfFilename)
PDFRender类的实现
import UIKit
class PDFRender: UIPrintPageRenderer {
// A4纸大小 595*842
let pageFrame:CGRect = CGRect(x: 0.0, y: 0.0, width: 595, height: 842)
override init() {
super.init()
// 设置打印纸的尺寸大小
self.setValue(pageFrame, forKey: "paperRect")
// 设置内容区域大小
self.setValue(pageFrame, forKey: "printableRect")
}
/// 绘制PDF并生成NSData
func drawPDF() -> NSData! {
let data:NSMutableData = NSMutableData()
// 小心!第二个参数如果设置为CGRect.zero,PDF尺寸就会是默认的 612*792
UIGraphicsBeginPDFContextToData(data, pageFrame, nil)
self.prepare(forDrawingPages: NSRange.init(location: 0, length: self.numberOfPages))
let bounds:CGRect = pageFrame
for i in 0..<self.numberOfPages{
UIGraphicsBeginPDFPage()
self.drawPage(at: i, in: bounds)
}
UIGraphicsEndPDFContext()
return data
}
}
Ficow原创,转载请注明出处:http://www.cnblogs.com/ficow/p/7859462.html
iOS 将WKWebView内的HTML打印为PDF的更多相关文章
- iOS开发苹果内购的介绍与实现
1.iOS开发苹果内购的介绍 1.1 介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝 ...
- iOS:苹果内购实践
iOS 苹果的内购 一.介绍 苹果规定,凡是虚拟的物品(例如:QQ音乐的乐币)进行交易时,都必须走苹果的内购通道,苹果要收取大约30%的抽成,所以不允许接入第三方的支付方式(微信.支付宝等),当然开发 ...
- ios调用Html内JS alert 不能点击关闭为甚?
ios调用Html内JS alert 不能点击关闭为甚? This question gave me the most insight to the problem... Deadlock with ...
- IOS IAP APP内支付 Java服务端代码
IOS IAP APP内支付 Java服务端代码 场景:作为后台需要为app提供服务,在ios中,app内进行支付购买时需要进行二次验证. 基础:可以参考上一篇转载的博文In-App Purcha ...
- 将python代码打印成pdf
将python代码打印成pdf,打印出来很丑,完全不能看. mac下:pycharm 编辑器有print的功能,但是会提示: Error: No print service found. 所以需要一个 ...
- ahk打印成pdf记录
软工课程后记: 要求将博客打印成pdf存档.为了偷懒,不想自己点鼠标一个个保存,所以写了一个ahk小程序.博客教程推荐,建议一试,不难.还很方便.我也只学了点点皮毛,满足需求即止. 第一个成功的小例子 ...
- 基于iTextSharp的PDF操作(PDF打印,PDF下载)
基于iTextSharp的PDF操作(PDF打印,PDF下载) 准备 1. iTextSharp的简介 iTextSharp是一个移植于java平台的iText项目,被封装成c#的组件来用于C#生成P ...
- 网页批量打印成PDF,并按条件合并成大PDF、生成页码
题记:因为老板要求将过去一年内系统中的订单合同内容进行打印,并按月进行整理成纸质文件.合同在系统(web系统)中以html形式显示,打印单份都是在网页中右键打印,订单量上千份,每笔订单有两份合同,如果 ...
- iOS 开发之路(WKWebView内嵌HTML5之图片上传) 五
HTML5页面的图片上传功能在iOS端的实现. 首先,页面上用的是plupload组件,在wkwebview上存在两个坑需要修复才能正常使用. 问题:在webview上点击选择照片/相机拍摄,就会出现 ...
随机推荐
- 关于Widget预览图的改动
在做项目时候,由于常常不带GPS功能.所以在有些细节上须要做处理,当中之中的一个就是.快捷开关的预览图和实际效果图的差异 在我们快捷开关的预览图中,总是能够看到五个快捷开关,事实上就包含GPS信息 而 ...
- 作为iOS程序员,最核心的60%能力有哪些?
作为iOS程序员,最核心的60%能力有哪些? 一个合格的iOS程序员需要掌握多少核心技能?你和专业的开发工程师的差距有多大?你现在的水平能开发一个功能完整性能高效的iOS APP吗?一起来看看下面 ...
- 3144: [Hnoi2013]切糕
3144: [Hnoi2013]切糕 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1526 Solved: 827[Submit][Status] ...
- monggodb 复制集 集群 搭建
https://docs.mongodb.com/manual/tutorial/enable-authentication/ Overview Enabling access control on ...
- HDU 6114 Chess 【组合数】(2017"百度之星"程序设计大赛 - 初赛(B))
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submi ...
- MySQL安装、安装时未提示输入密码、如何修改密码小结
http://blog.csdn.net/fr555wlj/article/details/54971412
- 微信小程序 新手入门教程
因为工作需要,最近学习了一下微信小程序,在此分享一下大概的流程. 强烈建议大家先去看微信小程序简易教程:点我进入 起步: 安装微信web开发软件者工具,需要破解的同学可以网上找破解教程,很简单的,这里 ...
- 解决virtualbox安装增强工具失败的问题
virtualbox有个增强工具,安装之后用户体验是非常爽的.但是有些时候在安装增强工具会遇到一些小问题,无非是没有安装gcc,make之类的编译工具或是需要安装kernel*.而我遇到的问题在做了这 ...
- dedecms中去除首页index.html的方法
本文介绍了dedecms中去除首页index.html的方法,有需要的朋友参考下. dedecms织梦cms建站程序输入地址后,而打开的实际地址后面有个index.html. 这里分享下两种解决方 ...
- 设置Tomcat的jvm内存问题
tomcat的jvm大小设置与操作系统以及jdk有关:具体来说: 1.操作系统是32bit的,程序最大内存访问空间是4G, 2的32次方,这是硬件决定的,跟windows linux没有任何关系. 2 ...