首页 > 解决方案 > Swift/IOS:如何从 Firebase 获取 PDF 并将其显示在 webkit 中?

问题描述

在 firebase 中,我有一个包含 PDF 的存储和一个对存储的 PDF 的引用以及 PDF 名称的集合。

我正在检索集合文档并在表格视图中显示标题。我希望能够单击 tableview 单元格,然后在另一个视图控制器的 webkit 视图中显示 pdf。

如何获取存储中的 PDF 并将其显示在 webkit 视图中?

到目前为止我的代码:

处理程序

class PDFHandler {
    static let db = Firestore.firestore()
    static let storage = Storage.storage()
    static var list = [PDF]()
    static var downloadURL : String?

    static func Create(title: String, url: String){
    }

    static func startListener(tableView: UITableView){
        print("Listening has begun")
        db.collection("PDF").addSnapshotListener { (snap, error) in
            if error == nil{
                self.list.removeAll()
                for pdf in snap!.documents{
                    let map = pdf.data()
                    let head = map["Headline"] as! String
                    let url = map["URL"] as? String ?? "empty"

                    let newPDF = PDF(id: pdf.documentID, headline: head, url: url)
                    print(newPDF)
                    self.list.append(newPDF)
                }
                DispatchQueue.main.async {
                    tableView.reloadData()
                }
            }
        }
    }

    static func downloadPdfs(pdfID: String, pdfurl: String){
        print("Download initiated")
        let pdfRef = storage.reference(withPath: pdfID)
        pdfRef.getData(maxSize: 99999999999) { (data, error) in
            if error == nil{
                print("Success downloading PDF")

                DispatchQueue.main.async {
                }
            }else{
                print("Error fetching pdf")
            }
        }
    }

    static func getSize() -> Int{
        return list.count
    }

    static func getPDFat(index: Int) -> PDF{
        return list[index]
    }
}

表视图

class ReportViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    @IBOutlet weak var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.delegate = self
        tableView.dataSource = self
        PDFHandler.startListener(tableView: tableView)
    }

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return PDFHandler.getSize()
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "PDFCell")
        cell?.textLabel?.text = PDFHandler.getPDFat(index: indexPath.row).headline

        return cell!
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if let destination = segue.destination as? PDFViewController{
            destination.rowNumber = tableView.indexPathForSelectedRow!.row
        }

    }


}

PDFView VC


import UIKit
import WebKit

class PDFViewController: UIViewController, WKUIDelegate {
    @IBOutlet weak var pdfview: WKWebView!
    var rowNumber = 0
    var url = ""

    override func viewDidLoad() {
        super.viewDidLoad()

        let myUrl = URL(string: "")
        let myRequest = URLRequest(url: myUrl!)
        pdfview.load(myRequest)

    }

    override func loadView() {
        let webConfig = WKWebViewConfiguration()
        pdfview = WKWebView(frame: .zero, configuration: webConfig)
        pdfview.uiDelegate = self
        view = pdfview
    }

}

标签: iosswiftpdfwebkit

解决方案


推荐阅读