標籤:print 輸出 paper ref string port err super frame
使用的webview為WKWebView,核心部分代碼(Swift 4):
// 建立列印渲染let printPageRenderer:PDFRender = PDFRender()// 擷取渲染格式let viewFormatter:UIViewPrintFormatter = webView.viewPrintFormatter()// 設定渲染格式printPageRenderer.addPrintFormatter(viewFormatter, startingAtPageAt: 0)// 將HTML渲染為PDFlet pdfData:NSData = printPageRenderer.drawPDF()// 輸出檔案let pdfFilename:String = "\(NSHomeDirectory())/Documents/test.pdf"// 儲存pdfData.write(toFile: pdfFilename, atomically: true)// 擷取檔案的儲存位置let url = URL.init(fileURLWithPath: pdfFilename)
PDFReader類的實現
import UIKitclass 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