【问题标题】:Display PDF file in Swift 4在 Swift 4 中显示 PDF 文件
【发布时间】:2018-07-12 15:01:19
【问题描述】:
import UIKit
import WebKit

class ViewController: UIViewController, UIDocumentInteractionControllerDelegate {

    var docController: UIDocumentInteractionController!

    override func viewDidLoad() {
        super.viewDidLoad()

        docController = UIDocumentInteractionController.init(url: URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(urlVal!))
        docController.delegate = self
        docController.presentPreview(animated: true)       
    }


    func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
            return self
     }
}

以上代码我无法显示 pdf 文件。有人可以帮忙吗?

【问题讨论】:

  • 您的 docController 是在哪里定义的?我在上面的代码中看不到。
  • 嗨,我在顶部定义
  • Open PDF file using swift的可能重复

标签: ios swift pdf webview


【解决方案1】:

通过查看您的代码,您似乎错过了添加 UIDocumentInteractionControllerDelegate 委托方法。

    class ViewController: UIViewController,UIDocumentInteractionControllerDelegate {
        override func viewDidLoad() {
            super.viewDidLoad()

           var docController = UIDocumentInteractionController.init(url: URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent(urlVal!))
            docController.delegate = self
            docController.presentPreview(animated: true)
        }
        func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
            return self
        }
    }

您还可以通过将 PDF 加载到 WKWebView 中来查看 PDF。

    override func viewDidLoad() {
        super.viewDidLoad()

        let pdfFilePath = Bundle.main.url(forResource: "iostutorial", withExtension: "pdf")
        let urlRequest = URLRequest.init(url: pdfFilePath!)
        webView = WKWebView(frame: self.view.frame)
        webView.load(request)
        self.view.addSubview(webView)

    }

【讨论】:

  • ...对不起,我错过了在这里添加..很抱歉..我实际上添加了 func documentInteractionControllerViewControllerForPreview
  • 无法将 WKWebView 类型的值赋给 UIWebView 类型!
  • 是的,您可以通过使用此代码来做到这一点。覆盖 func viewDidLoad() { super.viewDidLoad() 让 pdfFilePath = Bundle.main.url(forResource: "iostutorial", withExtension: "pdf") 让 urlRequest = URLRequest.init(url: pdfFilePath!) 让 webView = UIWebView(frame : self.view.frame) webView.loadRequest(urlRequest) self.view.addSubview(webView) }
  • 我在 let urlRequest = URLRequest.init(url: pdfFilePath!) 处遇到错误 Thread1 : EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP, subcode=0x0)
  • 其实它是我项目中的工作代码,你需要做的只是替换你的PDF文件路径。
【解决方案2】:

基本上,您缺少 UIDocumentInteractionControllerDelegate 实现。为了预览,你应该实现这个方法

    func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController

返回哪个 ViewController 需要显示 Preview。如果您传递 self 视图控制器,它将以模态方式在现有视图控制器中显示 PDF 预览。如果您想在同一个控制器中显示预览,只需在您的视图控制器中执行此操作即可。

    func documentInteractionControllerViewControllerForPreview(_ controller: UIDocumentInteractionController) -> UIViewController {
        return self
    }

如果您已经在代码中执行此操作,则 PDF URL 路径很可能是错误的。

【讨论】:

  • 我已经这样做了,但 pdf 仍然无法显示..pdf 从 DB 的一个 URL 获取
  • 好的。从 URL 下载 PDF 文件并将文件 url 路径传递给 DocumentInteractionController。
  • 但是..我需要使用URL来获取pdf文件哦
  • 正确。将 pdf 内容写入应用程序的 Documents 文件夹中的文件。从该文件中获取文件 URL。
  • ya..目前我从 DB 获得 URL
【解决方案3】:

我会改用 Quicklook 框架,它支持多种文档类型:

  • iWork 文档
  • Microsoft Office 文档
  • PDF 文件
  • 图片
  • 文本文件
  • 富文本格式文档
  • 逗号分隔值文件 (csv)

还支持相关文档的共享,易于实现。

按照本教程了解如何在 Swift 中进行操作:https://www.appcoda.com/quick-look-framework/

【讨论】:

    【解决方案4】:

    斯威夫特 5

    导入此框架

    import SafariServices
    

    然后在需要时调用这句话

    if let url = URL(string: "YOUR_PDF_URL") {
      let config = SFSafariViewController.Configuration()
      config.entersReaderIfAvailable = true
    
      let vc = SFSafariViewController(url: url, configuration: config)
      present(vc, animated: true)
    }
    

    代码将显示一个带有 pdf 的 Safari 视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 2011-02-24
      • 2019-12-04
      • 1970-01-01
      • 2015-06-11
      • 2018-08-04
      相关资源
      最近更新 更多