Joh*_*ths 6 macos cocoa swift wkwebview
我正在试图找出如何将WebView保存为PDF并完全卡住,真的很感激一些帮助吗?
我在OSX上的Cocoa和Swift中这样做,这是我的代码到目前为止:
import Cocoa
import WebKit
class ViewController: NSViewController {
override func loadView() {
super.loadView()
}
override func viewDidLoad() {
super.viewDidLoad()
loadHTMLString()
}
func loadHTMLString() {
let webView = WKWebView(frame: self.view.frame)
webView.loadHTMLString("<html><body><p>Hello, World!</p></body></html>", baseURL: nil)
self.view.addSubview(webView)
createPDFFromView(webView, saveToDocumentWithFileName: "test.pdf")
}
func createPDFFromView(view: NSView, saveToDocumentWithFileName fileName: String) {
let pdfData = view.dataWithPDFInsideRect(view.bounds)
if let documentDirectories = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first {
let documentsFileName = documentDirectories + "/" + fileName
debugPrint(documentsFileName)
pdfData.writeToFile(documentsFileName, atomically: false)
}
}
}
Run Code Online (Sandbox Code Playgroud)
这很简单,我正在做的是创建一个WebView并写一些基本的html内容给它:
然后获取视图并将其保存为PDF文件但是空白:
我试过从webView和View中抓取内容但没有快乐.
我在这里发现了类似的问题如何在webview完成关于将webview保存到图像的过程中截取屏幕截图,但到目前为止还没有运气OSX解决方案.
它可能与文档尺寸有关吗?或者内容在子视图中?也许如果你捕获视图你无法捕获SubView?
有任何想法吗?
iOS 11.0 及以上版本,Apple 提供了以下 API 来捕获 WKWebView 的快照。
@available(iOS 11.0, *)
open func takeSnapshot(with snapshotConfiguration: WKSnapshotConfiguration?, completionHandler: @escaping (UIImage?, Error?) -> Swift.Void)
Run Code Online (Sandbox Code Playgroud)
示例用法:
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if #available(iOS 11.0, *) {
webView.takeSnapshot(with: nil) { (image, error) in
//Do your stuff with image
}
}
}
Run Code Online (Sandbox Code Playgroud)
iOS 10 及以下,必须使用 UIWebView 来捕获快照。可以使用以下方法来实现。
func webViewDidFinishLoad(_ webView: UIWebView) {
let image = captureScreen(webView: webView)
//Do your stuff with image
}
func captureScreen(webView: UIWebView) -> UIImage {
UIGraphicsBeginImageContext(webView.bounds.size)
webView.layer.render(in: UIGraphicsGetCurrentContext()!)
let image: UIImage = UIGraphicsGetImageFromCurrentImageContext()!
UIGraphicsEndImageContext()
return image
}
Run Code Online (Sandbox Code Playgroud)
这是另一个相关的答案
| 归档时间: |
|
| 查看次数: |
2353 次 |
| 最近记录: |