使用的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

最新文章

  1. 7.让网站支持http和https的访问方式
  2. C#Linq技术中SelectMany(...)的内部实现推测
  3. [转]权限问题导致Nginx 403 Forbidden错误的解决方法
  4. 转换,2D,3D
  5. Unity3D热更新全书-PageZero
  6. ***CI的CLI运行方式
  7. JSON.parse()和JSON.stringify()使用
  8. Windows,linux快捷键
  9. App.Config详解
  10. 从源码角度深入理解LayoutInflater
  11. javaScript &amp; jquery完美判断图片是否加载完毕
  12. 用Android++在Visual Studio中用C/C++开发Android应用
  13. ubuntu14.04下 Android虚拟机 genymotion 的下载和安装
  14. 新手必看的jQuery优化笔记十则
  15. 关于jQuery表单下拉selected设置无效的解决方案
  16. Swift学习之元组(Tuple)
  17. 微软云消息队列 Azure service bus queue
  18. ConchAPI | 更智能的API监控,提升团队效率
  19. xtrabackup单表备份与恢复
  20. zTree基础

热门文章

  1. 翻译:A Tutorial on the Device Tree (Zynq) -- Part IV
  2. excel 创建数据有效性及背景颜色
  3. 获取Wifi密码,不知道是不是真的
  4. linux下的文件和文件夹的权限问题
  5. 使用Java绘制验证码
  6. iOS UI控件之间的关系图
  7. TCO 2016 Round 1B
  8. POJ1094 Sorting It All Out —— 拓扑排序
  9. 如何查看一个Application是32位的还是64位的?
  10. YTU 2451: 股市风云