2015-05-29 110 views
-1

我正嘗試讀取包含在.doc文件內的阿拉伯文本,並在我的應用程序中使用它。不幸的是,我能夠檢索文本的唯一方法是將文檔轉換爲.txt文件。無法讀取iOS中的.doc文件的內容

這裏是我的代碼:

NSError *error = nil; 
NSString *path = @"MyArabicDocument"; 
NSString *root = [[NSBundle mainBundle]pathForResource:path ofType:@"doc"]; 
NSString *myFile = [NSString stringWithContentsOfFile:root encoding:NSUTF8StringEncoding error:&error]; 

NSLog(@"my file contents are: %@", myFile); 
NSLog(@"error is: %@", error); 

我的NSString對象的輸出是(空),我得到的錯誤是:

error is: Error Domain=NSCocoaErrorDomain Code=256 "The operation couldn’t be completed. (Cocoa error 256.)" UserInfo=0x7aace470 {NSFilePath=/Users/MyName/Library/Developer/CoreSimulator/Devices/.../data/Containers/Bundle/Application/..MyApp.app/MyArabicDocument.doc} 

如果將我的文檔轉換成.rtf格式,則我的輸出(在更改上述代碼塊中的擴展名後)如下:

my file contents are: {\rtf1\ansi\ansicpg1252\cocoartf1347\cocoasubrtf570 
{\fonttbl\f0\fnil\fcharset0 LucidaGrande;\f1\fnil\fcharset178 AlBayan;\f2\fnil\fcharset178 GeezaPro; 
} 
{\colortbl;\red255\green255\blue255;} 
\vieww10800\viewh8400\viewkind0 
\deftab709 
\pard\pardeftab709\pardirnatural 

\f0\fs46 \cf0 1 
\f1 - \'de\'f3\'dc\'c7\'e1\'f3 \'c7\'c8\'fa\'dc\'e4\'f5 \'c2\'c8\'f3\'f8 \'e6\'f3\'c7\'d3\'fa\'e3\'f5\'dc\'e5\'f5 \'e3\'f5\'cd\'f3\'e3\'f3\'f8\'dc\'cf\'f5 
\f0 ~~~ 
\f1 \'c7\'e1\'e1\'e5\'f3 \'dd\'f6\'dc\'ed \'df\'f5\'dc\'e1\'f6\'f8 \'c7\'e1\'c3\'f5\'e3\'f5\'dc\'e6\'d1\'f6 \'c3\'f3\'cd\'fa\'dc\'e3\'f3\'dc\'cf\'f5 \ 

... 

如果我嘗試使用NSAttributedString對象,而不是一個NSString的對象,但我仍然得到一個(空)值我NSAttributedString對象:

NSDictionary *attrs = @{NSDocumentTypeDocumentAttribute: NSRTFTextDocumentType, NSWritingDirectionAttributeName:@[@(NSWritingDirectionRightToLeft | NSTextWritingDirectionOverride)]}; 

NSAttributedString *text = [[NSAttributedString alloc] initWithFileURL:[[NSBundle mainBundle] URLForResource:@"MyArabicDocument" withExtension:@"doc"] options:attrs documentAttributes:nil error:&error]; 

之所以這樣,是非常重要的是,雖然我的阿拉伯文字確實在我的應用程序中出現在我的UITextView中,問題是它的外觀遠不及原始文檔,這正是我想要在我的應用程序中維護的。這不可能嗎?

回答

1

有問題的.doc文件是二進制格式。 (可能是壓縮狀的.docx)

http://en.wikipedia.org/wiki/Doc_(computing)

所以你不能把它作爲NSString的是。但你可以得到的NSData:

NSString *path = [[NSBundle mainBundle] pathForResource:@"MyArabicDocument" ofType:@"doc"]; 
NSData *data = [NSData dataWithContentsOfFile:path]; 

可惜你不能從iOS設備上的.doc做出NSAttributedString,但你可以在OS X(iOS中有支持的只有四個文檔類型)

NSError *attrError; 
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSDocFormatTextDocumentType}; 
NSAttributedString *content = [[NSAttributedString alloc] initWithData:data options:options documentAttributes:nil error:&attrError]; 

相反,你可能會嘗試將您的.doc文件加載到WebView中。

使用NSData的:

[self.webView loadData:data MIMEType:@"application/msword" textEncodingName:@"UTF-8" baseURL:nil]; 

但我覺得更好的NSURLRequest(因爲你沒有的東東設置編碼有)

NSURL *url = [NSURL fileURLWithPath:path]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
[webView loadRequest:request]; 

注意:您選擇很可能會打破任何方法你的格式,我的意思是渲染文件將被損壞。相反,我建議將.doc轉換爲.pdf在這種情況下,它會很好。

例如,iOS的Dropbox應用程序通過非常方式將.doc/.docx轉換爲PDF,並以PDF的形式呈現給用戶(當然,並不是說它確實是PDF)。