Swift 4,Xcode 9.2,iOS 11
我生成一个HTML字符串,表示WKWebView
中显示的一堆数据,如下所示:
//I include this so I can reference some images
let bundle = Bundle.main.bundlePath
//Load the HTML
webView.loadHTMLString(htmlString, baseURL: URL(fileURLWithPath: bundle))
在我的WKWebView
didFinish navigation
委托中,我像这样构建PDF:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// - 1 - Grab the webView's print context
let fmt = webView.viewPrintFormatter()
fmt.perPageContentInsets = UIEdgeInsetsMake(10, 10, 10, 10) //Page margins
// - 2 - Assign print formatter to UIPrintPageRenderer
let render = UIPrintPageRenderer()
render.addPrintFormatter(fmt, startingAtPageAt: 0)
// - 3 - Assign paperRect and printableRect
let page = CGRect(x: 0, y: 0, width: 841.85, height: 595.22) //Page size
let printable = page.insetBy(dx: 0, dy: 0)
render.setValue(NSValue(cgRect: page), forKey: "paperRect")
render.setValue(NSValue(cgRect: printable), forKey: "printableRect")
// - 4 - Create PDF context and draw
let pdfData = NSMutableData()
UIGraphicsBeginPDFContextToData(pdfData, page, nil) //Set page size to landscape
for i in 0...render.numberOfPages {
UIGraphicsBeginPDFPage()
render.drawPage(at: i, in: UIGraphicsGetPDFContextBounds())
}
UIGraphicsEndPDFContext()
// - 5 - Save the PDF file
let pdfURL = documentsURL.appendingPathComponent("PDF")
let path = pdfURL.appendingPathComponent("MyFile.pdf").path
pdfData.write(toFile: path, atomically: true)
}
这可以很好地处理大约30页的PDF。但是,当我给它一个非常大的网页(40多页)时,我最终得到一个空白PDF,单页(没有任何渲染)。我怀疑 PDF渲染器崩溃或内存不足,但日志中没有任何迹象。
当我记录时,传入的htmlString
总是完成的。只是打印失败。
是否有更有效或更可靠的方法来解决这个问题?或者某种方式来更好地解决正在发生的事情?我非常感谢你的帮助。 :)