2010-12-09 47 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];