2014-02-05 59 views
7

我已經檢查了文檔的支持官方的鏈接,其明確表示,DOCX不UIWebView的支持,UIWebview(iOS)中的Docx支持?

https://developer.apple.com/library/ios/qa/qa1630/_index.html

但是,我也發現了一些球員能夠在一個UIWebView打開docx文件,

Cannot open docx file through webbrowser in app using OpenIn functionalityWhy doc and docx losing style information in iOS?How to open Microsoft Office documents in iPhone

而且,據我所知,iOS的Safari瀏覽器是基於UIWebView的建立,我能夠打開DOCX文件在瀏覽器中使用互聯網。 但是當我從我的測試服務器上下載一個docx(我通過從模擬器中導入下載的docx進行交叉檢查,並在我的mac上完全打開),我無法在UIWebview中查看它。

我很困惑, 是docx支持與否? 或者似乎docx有進一步的多種格式,其中一些支持?

這裏是我的加載代碼,

NSURLRequest *request = [NSURLRequest requestWithURL:urlPath]; 
    [webViewForDocsView loadRequest:request]; 
+0

我在我以前的應用程序中有docx。我的解決方案是上傳到Google Drive並在'UIWebView'中打開上傳文檔的公共共享鏈接。缺點是,有一個Google Drive工具欄。 – Raptor

+0

聰明的解決方法! – BangOperator

+0

p.s.這適用於幾乎所有Google Drive支持的文檔。此外,同樣的方法可以適用於Android Web View – Raptor

回答

7

不知道爲什麼,但使用的URL方案加載DOCX沒有工作,(下面的代碼沒有工作)

NSURLRequest *request = [NSURLRequest requestWithURL:urlPath]; 
[webViewForDocsView loadRequest:request]; 

而是將文件加載到內存中(使用N SData)並加載MIME類型工作的數據(下面的代碼像魅力一樣工作)

NSString *path = [urlFileInView path]; 
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path]; 


webViewForDocsView.delegate = self; 
[webViewForDocsView loadData:data MIMEType:@"application/vnd.openxmlformats-officedocument.wordprocessingml.document" textEncodingName:@"UTF-8" baseURL:nil]; 
+0

我知道這是舊的,但對於未來的讀者,請檢查您嘗試從中加載它的服務器的HTTP響應頭。如果服務器沒有返回正確的MIME類型,很可能就是這種差異,可能爲什麼它不起作用(以我的經驗)。 – eselk

6

UIWebView支持DOCX。只是試圖從裝載一束的docx文件,它似乎工作正常(在本例中命名爲「DOC1.docx」)

NSString *path = [[NSBundle mainBundle] pathForResource:@"DOC1" ofType:@"docx"]; 
NSURL *targetURL = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL]; 
[mywebView loadRequest:request]; 

::如果你正試圖以顯示駐留在服務器上的docx文件的地方,你可以簡單地將其加載到直接在Web視圖:

NSURL *targetURL = [NSURL URLWithString:@"http://www.central.wa.edu.au/Current_Students/JobsCareersandLeavingCentral/Documents/Resume%20Template.docx"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL]; 
[mywebView loadRequest:request]; 
+0

從服務器我沒有得到確切的URL位置,我得到的base64編碼數據,使用此我在應用程序沙箱文件夾中創建docx文件。所以文件不在主包中,也不在特定的服務器位置。無論如何,我得到了這個答案。 – BangOperator