当前位置: 首页 > 面试题库 >

如何在Swift中的UIWebView中加载本地PDF

衡安晏
2023-03-14
问题内容

所以我目前正在尝试显示我在UIWebview中拥有的本地PDF,这是我正在使用的代码:

@IBOutlet weak var webView:UIWebView!
override func viewDidLoad() {
    super.viewDidLoad()

var pdfLoc = NSURL(fileURLWithPath:NSBundle.mainBundle().pathForResource("Sample", ofType:"pdf")!) 
var request = NSURLRequest(URL: pdfLoc);
self.webView.loadRequest(request);
}

该代码将成功构建,但是当我运行该应用程序时,它将崩溃并显示以下错误:线程1:EXC_BAD_INSTRUCTION(code =
EXC-I386_INVOP,subcode = 0x0)

我已经找到了一些有关如何执行此操作的教程,但是它们都已经过时或在Objective-C中。


问题答案:

干得好:

if let pdf = NSBundle.mainBundle().URLForResource("myPDF", withExtension: "pdf", subdirectory: nil, localization: nil)  {
            let req = NSURLRequest(URL: pdf)
            let webView = UIWebView(frame: CGRectMake(20,20,self.view.frame.size.width-40,self.view.frame.size.height-40))
            webView.loadRequest(req)
            self.view.addSubview(webView)
        }

编辑

替代方法是通过NSData:

if let pdfURL = NSBundle.mainBundle().URLForResource("myPDF", withExtension: "pdf", subdirectory: nil, localization: nil),data = NSData(contentsOfURL: pdfURL), baseURL = pdfURL.URLByDeletingLastPathComponent  {
    let webView = UIWebView(frame: CGRectMake(20,20,self.view.frame.size.width-40,self.view.frame.size.height-40))
    webView.loadData(data, MIMEType: "application/pdf", textEncodingName:"", baseURL: baseURL)
    self.view.addSubview(webView)
}

苹果公司建议您不要对本地HTML文件使用.loadRequest,同时不要明确将其扩展到其他数据类型。所以我在上面提供了NSData路由。如果要指定textEncodingName,则可以为“
utf-8”,“ utf-16”等。

编辑:Swift 3

这是Swift 3版本的代码,正如苹果建议的那样,使用WKWebView代替UIWebView。

import UIKit
import WebKit

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        if let pdfURL = Bundle.main.url(forResource: "myPDF", withExtension: "pdf", subdirectory: nil, localization: nil)  {
            do {
                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)

            }
            catch {
                // catch errors here
            }

        }
    }

}

从Asset.xcassets访问PDF(快速4)

if let asset = NSDataAsset(name: "myPDF") {
            let url = Bundle.main.bundleURL
            let webView = WKWebView(frame: CGRect(x:20,y:20,width:view.frame.size.width-40, height:view.frame.size.height-40))
            webView.load(asset.data, mimeType: "application/pdf", characterEncodingName:"", baseURL:url)
            view.addSubview(webView)
       }


 类似资料:
  • 问题内容: 我有以下代码: 我收到以下错误: “ NSURLRequest”不可转换为UIWebView。 知道是什么问题吗? 问题答案: loadRequest:是实例方法,不是类方法。您应该尝试使用UIWebview的实例作为接收者而不是类本身来调用此方法。 但是,正如@radex在下面正确指出的那样,您还可以利用currying来调用如下函数: 斯威夫特5

  • 问题内容: 今天早上,这使我发疯。我想将一些本地html加载到Web视图中: 该html文件位于我的项目的根文件夹中,但位于组中。Webview对我来说是空白的。有什么想法怎么了?我正在使用xcode 6.1并在iPhone 6上运行此示例。 问题答案: 要检索应用程序资源的URL,应使用类的方法。 迅捷2 迅捷3

  • 我知道这个问题已经被问到这里了。但我面临着一些问题没有得到解决。 Error Domain=NSURLErrorDomain Code=-1001“请求超时。”userinfo={nsunderlyingError=0x60800084D950{Error domain=KCFNetwork code=-1001“请求超时。”userinfo={noj/library/developer/core

  • 问题内容: 关于一个主题,人们可以使用新语言Swift轻松查看如何在Web视图中管理Cookie呢?如果您在Internet上签到,则在需要实现此功能时不会发现任何有趣的东西。甚至苹果公司的文件也很差。 有人知道如何在Swift中处理这些过程吗?这是我在Obj-C中找到的: 查看存储的Cookie 删除存储的Cookie 如果我们能给出一次答案的话,对每个人都很好!干杯! 问题答案: 试试这个代码

  • 问题内容: 如何创建从我的网站到UIWebView的JavascriptInterface通道? Android中的示例: 我想从这个JavascriptInterface绘制方法,例如: 要么 我能怎么做? 问题答案: 对于WKWebView:源在这里 的JavaScript 迅速 对于UIWebView:此处来源 HTML中的JavaScript 迅速