You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 5中如何在Safari或WebView打开本地PDF文件

解决本地PDF无法打开的问题

问题根源

你当前代码的错误在于重复构造URL:file本身已经是合法的file://协议URL,你却用它的absoluteString(即file:///xxx.pdf)再传入URL(filePath:),这会生成无效的URL(路径变为file://file:///xxx.pdf),自然无法正常打开。

修复代码

直接使用原有的fileURL调用open方法即可:

print(file.absoluteString)
UIApplication.shared.open(file)

关于file://协议白名单的说明

iOS系统默认限制UIApplication.shared.open直接打开file://协议链接,即便在LSApplicationQueriesSchemes里添加file白名单也无法绕过——这是系统的安全策略,防止应用随意访问本地文件。

更可靠的本地PDF预览方案

如果直接调用open仍有问题,推荐使用官方支持的两种方式预览本地PDF:

方式1:使用QLPreviewController

import QuickLook

class PDFPreviewViewController: QLPreviewController, QLPreviewControllerDataSource {
    var fileURL: URL!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        dataSource = self
    }
    
    func numberOfPreviewItems(in controller: QLPreviewController) -> Int {
        return 1
    }
    
    func previewController(_ controller: QLPreviewController, previewItemAt index: Int) -> QLPreviewItem {
        return fileURL as QLPreviewItem
    }
}

// 调用示例
let previewVC = PDFPreviewViewController()
previewVC.fileURL = file
present(previewVC, animated: true)

方式2:使用WKWebView加载

import WebKit

let webView = WKWebView(frame: view.bounds)
view.addSubview(webView)

let request = URLRequest(url: file)
webView.load(request)

内容的提问来源于stack exchange,提问作者trilogy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 11:32:07