iOS 将WKWebView内的HTML打印为PDF
Posted Ficow Shen
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章
如何从 WKWebview 内的按钮单击重定向并使用目标 c 返回到 iOS 应用程序?
iOS WKWebview如何检测我何时点击<a>标签内的图像