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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM