【问题标题】:Display PDF in UIWebView using loadData使用 loadData 在 UIWebView 中显示 PDF
【发布时间】:2010-12-09 09:11:34
【问题描述】:

我正在尝试在 UIWebView 中显示我本地存储的 PDF。这就是我目前尝试这样做的方式:

if (![[NSFileManager defaultManager] fileExistsAtPath:self.url]) {
LOG_ERROR(@"Couldn't load local file. File at path: %@ doesn't exist", self.url);
        return; 
}

nsurl=[NSURL fileURLWithPath:self.url];
NSData *data = [NSData dataWithContentsOfFile:self.url];
LOG_DEBUG(@"data length:%d",[data length]);
[self.webView loadData:data MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

我也尝试过为 textEncoding 传递 nil,以及使用 UIWebView 的 loadRequest。结果是一个显示空白页面的 UIWebView。 UIWebView 委托方法中没有错误发生。奇怪的是,对于我试图显示的 PDF,数据的长度(以字节为单位)是正确的,这意味着文件被正确找到并加载。

有没有人知道这里可能出了什么问题或者我可以如何更好地调试这个问题?

【问题讨论】:

    标签: pdf uiwebview nsdata


    【解决方案1】:

    您可以在下面找到两种不同的方法来在您的UIWebView 上打开.pdf 文件;一个来自url,一个来自NSData

    if (self.pdfDataToLoad) //Loading the pdf as NSData
    { 
        [self.webView loadData:self.pdfData 
                      MIMEType:@"application/pdf" 
              textEncodingName:@"UTF-8" 
                       baseURL:nil];
    }
    else  //Open the pdf from a URL 
    { 
        NSURL *targetURL = [NSURL URLWithString:@"https://bitcoin.org/bitcoin.pdf"];
        NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
        [self.webView loadRequest:request];
    }
    

    【讨论】:

    • 这个。每个人都在说“你不需要它,只需加载文件 URL!”。但就我而言,我在 RAM 中将 PDF 作为 NSData() (我只是从 HTML 渲染它),将它保存到一个临时文件是没有意义的。感谢您回答实际问题。
    【解决方案2】:

    原来问题与 PDF 的文件格式有关。我使用 Illustrator 编辑它们并重新保存它们。我猜 Mobile Safari 不喜欢 Illustrator 格式化文件的方式,因为使用模拟器的浏览器查看时每个文件都是空白的(尽管我可以在常规 Safari 中打开 PDF 就好了)。

    解决方案是使用预览打开 PDF 并重新保存它们。通过预览保存例程运行每个 PDF 后,我能够在不更改任何代码的情况下让每个 PDF 显示在 UIWebView 中。

    【讨论】:

      【解决方案3】:

      你不需要 NSData 来加载本地文件,loadRequest 应该直接与 NSURL 一起工作

      [self.webView loadRequest:[NSURLRequest requestWithURL:nsurl]];
      

      我只能建议这样 NSURL

      nsurl = [NSURL URLWithString:[self.url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
      

      【讨论】:

      • 你是绝对正确的。这与我的解决方案无关,但我最终确实按照您描述的方式进行了操作。
      【解决方案4】:

      NSData 用于加载本地存储在任何目录中的 pdf 文件。 要加载应用程序中的 pdf,请使用以下代码。

      NSString *path = [[NSBundle mainBundle] pathForResource:@"FileNameHere" 
                                                   ofType:@"pdf"];
      NSURL *url = [NSURL fileURLWithPath:path];
      NSURLRequest *request = [NSURLRequest requestWithURL:url];
      [webView loadRequest:request];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-06
        • 2019-04-07
        • 1970-01-01
        • 2016-05-31
        • 2016-03-07
        相关资源
        最近更新 更多