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 保持在安全区域内的约束

如何从 WKWebview 内的按钮单击重定向并使用目标 c 返回到 iOS 应用程序?

iOS WKWebview如何检测我何时点击<a>标签内的图像

在 iOS WKWebView 中保留“Referer”标头?

隐藏WKWebView避免VoiceOver识别ios

外部JS可以在iOS WkWebView中的加载页面(完成时)上执行吗