swift - 从 WKWebView 保存 PDF

标签 swift macos pdf webkit wkwebview

此问题适用于 macOS,而非 iOS。

请注意,此问题被报告为 this question 的重复问题.该页面上的答案与 iOS(无关)有关,或者使用已弃用的 WebView 作为解决方案,这正是我首先要问的问题。

因此 Apple 已弃用 WebView 以支持 WKWebView,但我没有看到能够从新的导出(或打印)PDF 的可行解决方案查看类型。我在委托(delegate)方法 webView(_ webView: WKWebView, didFinish navigation: WKNavigation!)

中尝试了以下(以及更多)

1.

    let pdfData = webView.dataWithPDF(inside: webView.frame)
    try? pdfData.write(to: URL(fileURLWithPath: "/filepath/to/test.pdf"))

这导致了一个字面上的空白 pdf 文件。

2.

webView.takeSnapshot(with: nil) { (image, error) in
    if let error = error {
        print("Error: \(error)")
        return
    }
    guard let image = image else {
        print("No image")
        return
    }
    try? image.tiffRepresentation?.write(to: URL(fileURLWithPath: "/path/to/test.tif"))
}

虽然这在图像中获得了实际内容,但它是一个(巨大的)渲染位图图像,已经丢失了所有文本/字符串数据,它也只显示屏幕上可见的内容,没有超出窗口边缘的内容。

与此同时,根据网络上提供的大量示例,使用 WebView 效果很好,符合预期。我是否相信 Apple 发布了已弃用框架的半成品替代品,还是我做错了什么?

最佳答案

现在可以使用 WKWebViewcreatePDF 方法:https://developer.apple.com/documentation/webkit/wkwebview/3650490-createpdf

这是一个例子:

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
  let config = WKPDFConfiguration()
      
  //Set the page size (this can match the html{} size in your CSS
  config.rect = CGRect(x: 0, y: 0, width: 792, height: 612)
      
  //Render the PDF
  webView.createPDF(configuration: config){ result in
    switch result{
      case .success(let data):
        try! data.write(to: URL(fileURLWithPath: "/path/file.pdf"))
      case .failure(let error):
        print(error)
    }
  }
}

我可以在 macOS 和 iOS 上使用它。希望这会有所帮助。

关于swift - 从 WKWebView 保存 PDF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62423685/

相关文章:

ios - 给大标题导航栏添加一个按钮

swift - 遍历字符串字典、自定义对象并调用自定义对象初始化程序

objective-c - 10.9 CoreBluetooth 检索外围设备

macos - 如何在 Mac OS X 菜单栏的右上角显示我的应用程序图标(以编程方式)

pdf - 是否可以在 Cassandra 中以 CQL blob 类型存储 PDF 文件?

ios - swift 中的自定义 Collection View 单元格

Java File.exists 和其他文件操作为现有文件返回错误结果(网络、macosx)

r - 使用 R 从两列 PDF 中提取文本

javascript - Html 内容到 Pdf 转换

ios - 如何处理 Firestore 查询结果供以后使用