从文档 URL 加载 PDF

Posted

技术标签:

【中文标题】从文档 URL 加载 PDF【英文标题】:Loading PDF From Documents URL 【发布时间】:2016-02-11 12:10:25 【问题描述】:

我是 ios 开发的新手,所以对于我提出的所有新问题,我深表歉意。在 Swift 中将 PDF 加载到我的 WebView 时,我似乎遇到了问题。 打印出 Documents 目录中的所有文件,结果是:

file:///Users/adriandavidsmith/L​​ibrary/Developer/CoreSimulator/Devices/B537EBE4-14AE-439A-B84B-31342E233367/data/Containers/Data/Application/E791BF20-CC53-4FBB-B34A-F73CED74EB5D /Documents/ST_Business%20Times_07022016.pdf

但是,当我尝试将该文件加载到 WebView 中时,没有显示任何内容。好像找不到文件一样。

if let pdf = NSBundle.mainBundle().URLForResource("ST_Business%20Times_07022016", withExtension: "pdf", subdirectory: "Documents", localization: nil)

let req = NSURLRequest(URL: pdf)
webView.loadRequest(req)

我确定我错过了一些非常小的和令人沮丧的东西!

提前致谢!

【问题讨论】:

文档存放在 Application Documents 目录中,而不是存放在 Application bundle 中。 ***.com/questions/14937846/… 【参考方案1】:

兼容 Swift 3

        var pdfURL = (FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)).last! as URL
        pdfURL = pdfURL.appendingPathComponent( "example.pdf") as URL

        let data = try! Data(contentsOf: pdfURL)
        let webView = WKWebView(frame: CGRect(x:20,y:20,width:view.frame.size.width-40, height:view.frame.size.height-40))
        webView.load(data, mimeType: "application/pdf", characterEncodingName:"", baseURL: pdfURL.deletingLastPathComponent())
        view.addSubview(webView)

【讨论】:

谢谢。只是。谢谢你。我爱你。【参考方案2】:

您是从捆绑包中获取它,而不是从文档目录中获取它。

试试这个....

var pdf = (NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)).last as? NSURL

pdf = pdf?.URLByAppendingPathComponent( "ST_Business%20Times_07022016.pdf")
let req = NSURLRequest(URL: pdf)
webView.loadRequest(req)

【讨论】:

【参考方案3】:

E791BF20-CC53-4FBB-B34A-F73CED74EB5D 是应用程序文件夹,其中包含您要查看的 pdf 文件的 Documents 文件夹。

这将给出 Documents 文件夹的路径。

let fileManager = NSFileManager.defaultManager()
 let documentsUrl = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as NSURL
print(documentsUrl)

您需要更改代码

let pdf = documentsUrl + "/<your pdf file name>"

let req = NSURLRequest(URL: pdf)
webView.loadRequest(req)

希望这对你有用。

【讨论】:

【参考方案4】:

请在加载文件之前检查您的路径是否存在有效文件。

    let webView : UIWebView!
    webView = UIWebView()
    webView.frame = self.view.bounds
    self.view.addSubview(webView)
    let PDF_FILE_PATH  = NSBundle.mainBundle().pathForResource("ST_Business%20Times_07022016", ofType: "pdf")
    let checkValidation = NSFileManager.defaultManager()

    if (checkValidation.fileExistsAtPath(PDF_FILE_PATH!))
    
        print("FILE AVAILABLE");
        let req = NSURLRequest(URL: NSURL(string: PDF_FILE_PATH!)!)
        webView.loadRequest(req)
    
    else
    
        print("FILE NOT AVAILABLE");
    

【讨论】:

以上是关于从文档 URL 加载 PDF的主要内容,如果未能解决你的问题,请参考以下文章

从文档目录加载 PDF - iPhone

从远程 url 加载 pdf 以作为 Mandrill 附件发送

在 WKWebView swift 中下载文档并加载图像(png、jpeg)、pdf、doc 等

将 PDF 文档从远程服务器加载到 base64 编码数据中

电子:从缓冲区加载URL

mpdf - 来自 url 的图像不会加载到生成的 pdf 中