2010-12-09 51 views
11

我想显示一个PDF,我本地存储在UIWebView中。这是我目前正在试图做到这一点:使用loadData在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,以及使用的UIWebView的的loadRequest。结果是显示空白页面的UIWebView。 UIWebView委托方法没有发生错误。奇怪的是,数据具有正确的长度,以字节为单位,我试图显示PDF,这意味着该文件正在被找到并正确加载。

有没有人有一个想法,可能会出现什么问题,或者我该如何更好地调试此问题?

回答

4

下面你可以找到两种不同的方法来打开你的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]; 
} 
+3

这。每个人都在说“你不需要它,只需加载文件的URL!”。但就我而言,我在RAM中使用PDF作为`NSData()`(我只是从HTML中提取它),将一次保存到临时文件是毫无意义的。感谢您回答实际问题。 – 2016-01-20 10:45:17

1

你不需要的NSData加载本地文件,应该的loadRequest与NSURL直接合作

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

我只能建议作出NSURL像

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

你是绝对正确的。这与我的解决方案无关,但我确实按照您描述的方式完成了。 – mmontalbo 2010-12-18 04:32:47

2

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

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

1

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

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