将 WebView 保存为 PDF 返回空白图像?

2024-07-04

我正在尝试弄清楚如何将 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)
        }
    }

}

这非常简单,我正在做的是创建一个 WebView 并向其写入一些基本的 html 内容,以呈现以下内容:

然后获取视图并将其保存到 PDF 文件,但显示为空白:

我尝试从 webView 和 View 中获取内容,但没有任何乐趣。

我在这里发现了类似的问题webview渲染完成后如何截图 https://stackoverflow.com/questions/15051007/how-to-take-a-screenshot-when-a-webview-finished-rending关于将 webview 保存到图像,但到目前为止 OSX 解决方案还没有成功。

是否与文档尺寸有关? 或者内容在子视图中? 也许如果你捕获了视图,你就无法捕获子视图?

有任何想法吗?


iOS 11.0 及以上版本,Apple提供了以下API来捕获WKWebView的快照。

@available(iOS 11.0, *)
    open func takeSnapshot(with snapshotConfiguration: WKSnapshotConfiguration?, completionHandler: @escaping (UIImage?, Error?) -> Swift.Void)

使用示例:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {

        if #available(iOS 11.0, *) {
            webView.takeSnapshot(with: nil) { (image, error) in
                //Do your stuff with image
            }
        }
    }

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
    }

这是另一个相关的answer https://stackoverflow.com/a/44627307/3659227

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 WebView 保存为 PDF 返回空白图像? 的相关文章

随机推荐