2010-03-25 50 views
11

它看起來像是一些人在stackoverflow得到這個工作,但他們的代碼不張貼。我使用在UIWebView中顯示ppt,doc和xls不起作用,但pdf確實是

[web loadData:data MIMEType:MIMEType textEncodingName:@"UTF-8" baseURL:nil]; 

其中的MIME類型是:

  • @ 「應用程序/ vnd.ms - PowerPoint中」
  • @ 「應用程序/ vnd.ms字」
  • @「應用程序/vnd.ms-excel」

(順便說一句,我見過的DOC文件使用MIME類型@‘應用程序/ msword’,但‘VND’版本似乎更合適。我都嘗試,以防萬一。)

我驗證了我的'數據'是正確的。 PDF和TXT文件的工作。當UIWebView顯示PPT,DOC或XLS文件時,它是空白的。我把NSLOG語句放在我的UIWebViewDelegate調用中。

shouldStartLoadWithRequest:<NSMutableURLRequest about:blank> navType:5 
    webViewDidStartLoad: 
    didFailLoadWithError:Error Domain=NSURLErrorDomain Code=100 UserInfo=0x122503a0 "Operation could not be completed. (NSURLErrorDomain error 100.)" 
    didFailLoadWithError:Error Domain=WebKitErrorDomain Code=102 UserInfo=0x12253840 "Frame load interrupted" 

很明顯負載失敗,但爲什麼?如果我將我的mimetype更改爲@「text/plain」作爲PPT文件,UIWebView將正常加載並顯示不可打印的字符,如預期的那樣。這是告訴我傳遞給loadData的'數據':沒問題。

意思是我的mimetypes不好?

爲了確保我的PPT,DOC和XLS文件確實可以正常顯示,我創建了一個簡單的帶文件錨標籤的html文件。當在iPhone上的Safari中顯示html文件時,單擊這些文件可以在Safari中正確顯示。

我試圖研究在didFailLoadWithError(100)中顯示的錯誤代碼,但所有記錄的錯誤代碼都是負數並且大於1000(如NSURLError.h中所示)。

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"didFailLoadWithError:%@", error); } 

回答

9

您是否嘗試過使用下面的方法記錄?:

-(void)loadDocument:(NSString*)documentName inView:(UIWebView*)webView 
{ 
    NSString *path = [[NSBundle mainBundle] pathForResource:documentName ofType:nil]; 
    NSURL *url = [NSURL fileURLWithPath:path]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
    [webView loadRequest:request]; 
} 

// Calling -loadDocument:inView: 

[self loadDocument:@"mydocument.rtfd.zip" inView:self.myWebview]; 

它爲這些在iPhone OS 2.2.1: 的Excel(.xls的) 主題(.key.zip) 號碼(.numbers.zip) 頁面(.pages.zip) PDF(.PDF) 簡報(.PPT) 字(.DOC)

iPhone OS 3.0 SUP端口這些額外的文檔類型: 富文本格式(.rtf) 富文本格式目錄(.rtfd.zip) 主題'09(.KEY) 號'09(.numbers) Pages '09中(.PAGES)

+0

是的,我已經使用loadRequest,並且在將附件文件作爲我的項目的一部分時工作正常。我這樣做只是爲了測試,以確保我的文件沒問題。但是,在我的真實應用程序中,文件是從服務器下載的,我擁有的僅僅是NSData。 – slugolicious 2010-04-23 11:20:02

+0

你不能使用NSURL * url = [NSURL fileURLWithPath:path];和NSURLRequest * request = [NSURLRequest requestWithURL:url];從你的服務器下載?我可以。是否有某些原因導致您無法在服務器上加載文件的URL? – 2010-04-23 11:47:33

+0

這種方法很好,歡呼! – AdamM 2012-09-21 13:28:40

7

我發現讀取Office對象(使用.doc或.xls進行測試)的唯一方法是將NSData對象保存在臨時文件中,然後讀取它。

-(void)openFileUsingExtension:(NSString*)extension { 
    NSString *path = [NSString stringWithFormat:@"%@temp.%@",NSTemporaryDirectory(),extension]; 
    NSLog(@"%@",path); 

    if ([objectFromNSData writeToFile:path atomically:YES]) { 
     NSLog(@"written"); 

     NSURL *url = [NSURL fileURLWithPath:path]; 
     NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
     [self.webview loadRequest:request]; 
     self.webview.scalesPageToFit = YES; 
     self.webview.delegate = self; 
     [self.view addSubview:self.webview]; 
    } 
} 

,那麼你可以刪除該文件UIWebViewDelegate方法中:

- (void)webViewDidFinishLoad:(UIWebView *)webView{ 
    NSString *path = [NSString stringWithFormat:@"%@temp.%@",NSTemporaryDirectory(),extension]; 
    [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; 
} 
+0

這對我最適合! – MobileMon 2013-12-05 14:56:09

2

你試試這個設備上或僅在模擬器?

我發現我無法讓UIWebView在模擬器中顯示.doc和.pages文檔(但可以顯示.txt和.pdf文檔),但這兩種文件類型都可以在iPad和iPhone設備上加載和顯示。

模擬器中的錯誤?

格雷戈爾, 瑞典

3
UIWebView *webView = [[UIWebView alloc]initWithFrame:CGRectMake(0.0, 0.0, 1000, 760)]; 
[webView setScalesPageToFit:YES]; 
webView.backgroundColor=[UIColor clearColor]; 
NSString *ppt = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"ppt"]; 
NSURL *pptURL = [NSURL fileURLWithPath:ppt]; 
NSURLRequest *request = [NSURLRequest requestWithURL:pptURL]; 
[webView loadRequest:request]; 
[self.view addSubview:webView]; 
[webView release]; 
+0

這是工作..謝謝 – Muzammil 2012-09-05 13:24:29

0

搜索通後,我找到了解決辦法,是因爲當我們將XLS到Xcode中通過拖放XLS文件到項目 - >支持文件,我們需要具體的'添加到目標:',我們需要勾選項目以添加

相關問題