【问题标题】:Can we open pdf file using UIWebView on iOS?我们可以在 iOS 上使用 UIWebView 打开 pdf 文件吗?
【发布时间】:2011-02-19 09:47:37
【问题描述】:

我们可以从 UIWebView 打开 pdf 文件吗?

【问题讨论】:

    标签: ios pdf uiwebview


    【解决方案1】:

    是的,这可以通过 UIWebView 完成。

    如果您尝试显示驻留在某处服务器上的 PDF 文件,您可以直接将其加载到 Web 视图中:

    Objective-C

    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
    
    NSURL *targetURL = [NSURL URLWithString:@"https://www.example.com/document.pdf"];
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
    [webView loadRequest:request];
    
    [self.view addSubview:webView];
    

    斯威夫特

    let webView = UIWebView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))
    
    let targetURL = NSURL(string: "https://www.example.com/document.pdf")! // This value is force-unwrapped for the sake of a compact example, do not do this in your code
    let request = NSURLRequest(URL: targetURL)
    webView.loadRequest(request)
    
    view.addSubview(webView)
    

    或者,如果您的应用程序捆绑了一个 PDF 文件(在本示例中名为“document.pdf”):

    Objective-C

    UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
    
    NSURL *targetURL = [[NSBundle mainBundle] URLForResource:@"document" withExtension:@"pdf"];
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
    [webView loadRequest:request];
    
    [self.view addSubview:webView];
    

    斯威夫特

    let webView = UIWebView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))
    
    let targetURL = NSBundle.mainBundle().URLForResource("document", withExtension: "pdf")! // This value is force-unwrapped for the sake of a compact example, do not do this in your code
    let request = NSURLRequest(URL: targetURL)
    webView.loadRequest(request)
    
    view.addSubview(webView)
    

    您可以在此处找到更多信息:Technical QA1630: Using UIWebView to display select document types

    【讨论】:

    • 非常感谢...阿列斯。我们可以将它保存在 iPhone 的本地文档目录中吗?
    • 是的,这是可能的,但是您必须使用除 WebView 之外的其他方法来获取文档。在 Stack Overflow 上搜索它。例如:stackoverflow.com/questions/2102267/…
    • 这里是否可以提供打印选项
    • 这里的pdf页面是垂直列出的。是否可以水平显示,不垂直滚动。
    • @MartinAlléus:你能帮我解决这个问题吗stackoverflow.com/questions/21874538/…
    【解决方案2】:

    UIWebviews 也可以使用loadData 方法加载.pdf,如果你获取它为NSData

    [self.webView loadData:self.pdfData 
                  MIMEType:@"application/pdf" 
          textEncodingName:@"UTF-8" 
                   baseURL:nil];
    

    【讨论】:

      【解决方案3】:

      用它在 webview 中打开 pdf 文件

      NSString *path = [[NSBundle mainBundle] pathForResource:@"mypdf" ofType:@"pdf"];
      NSURL *targetURL = [NSURL fileURLWithPath:path];
      NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
      UIWebView *webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
      [[webView scrollView] setContentOffset:CGPointMake(0,500) animated:YES];
      [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0.0, 50.0)"]];
      [webView loadRequest:request];
      [self.view addSubview:webView];
      [webView release];
      

      【讨论】:

        【解决方案4】:
        NSString *folderName=[NSString stringWithFormat:@"/documents/%@",[tempDictLitrature objectForKey:@"folder"]];
        NSString *fileName=[tempDictLitrature objectForKey:@"name"];
        [self.navigationItem setTitle:fileName];
        NSString *type=[tempDictLitrature objectForKey:@"type"];
        
        NSString *path=[[NSBundle mainBundle]pathForResource:fileName ofType:type inDirectory:folderName];
        
        NSURL *targetURL = [NSURL fileURLWithPath:path];
        NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
        webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 730)];
        [webView setBackgroundColor:[UIColor lightGrayColor]];
        webView.scalesPageToFit = YES;
        
        [[webView scrollView] setContentOffset:CGPointZero animated:YES];
        [webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0.0, 50.0)"]];
        [webView loadRequest:request];
        [self.view addSubview:webView];
        

        【讨论】:

        • 请先创建 pdf 的路径并将其转换为 url 并使用此代码加载 web 视图,它对我有用,所以请在您的代码中使用相同的代码
        【解决方案5】:

        Swift 版本:

        if let docPath = NSBundle.mainBundle().pathForResource("sample", ofType: "pdf") {
            let docURL = NSURL(fileURLWithPath: docPath)
            webView.loadRequest(NSURLRequest(URL: docURL))
        }
        

        【讨论】:

          【解决方案6】:

          Martin Alléus 的答案更新,无论是手机还是 iPad,无需硬编码即可获得全屏:

          CGRect rect = [[UIScreen mainScreen] bounds];
          CGSize screenSize = rect.size;
          UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,screenSize.width,screenSize.height)];
          
          NSString *path = [[NSBundle mainBundle] pathForResource:@"pdf" ofType:@"pdf"];
          NSURL *targetURL = [NSURL fileURLWithPath:path];
          NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
          [webView loadRequest:request];
          
          [self.view addSubview:webView];
          

          【讨论】:

            【解决方案7】:

            斯威夫特 4

                 let webView = UIWebView(frame: view.bounds)
                let targetURL = Bundle.main.url(forResource: "sampleFileName", withExtension: "pdf")
                let request = URLRequest(url: targetURL!)
                webView.loadRequest(request)
                view.addSubview(webView)
            

            【讨论】:

              【解决方案8】:
              NSString *path = [[NSBundle mainBundle] pathForResource:@"document" ofType:@"pdf"];
              NSURL *targetURL = [NSURL fileURLWithPath:path];
              NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
              [webView loadRequest:request];
              

              【讨论】:

                【解决方案9】:
                UIWebView *pdfWebView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
                
                NSURL *targetURL = [NSURL URLWithString:@"http://unec.edu.az/application/uploads/2014/12/pdf-sample.pdf"];
                    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
                    [pdfWebView loadRequest:request];
                    [self.view addSubview:pdfWebView];
                

                【讨论】:

                  【解决方案10】:

                  WKWebView:我发现这个问题是让人们知道他们应该开始使用 WKWebview 的最佳地点,因为 UIWebView 现在 已弃用 .

                  目标 C

                  WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame];
                  webView.navigationDelegate = self;
                  NSURL *nsurl=[NSURL URLWithString:@"https://www.example.com/document.pdf"];
                  NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
                  [webView loadRequest:nsrequest];
                  [self.view addSubview:webView];
                  

                  斯威夫特

                  let myURLString = "https://www.example.com/document.pdf"
                  let url = NSURL(string: myURLString)
                  let request = NSURLRequest(URL: url!)  
                  let webView = WKWebView(frame: self.view.frame)
                  webView.navigationDelegate = self
                  webView.loadRequest(request)
                  view.addSubview(webView)
                  

                  我没有直接从 Xcode 复制这段代码,所以它可能包含一些语法错误。使用时请检查。

                  【讨论】:

                    猜你喜欢
                    • 2013-08-26
                    • 2018-03-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2017-09-15
                    • 1970-01-01
                    • 2014-10-05
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多