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