看起来像stackoverflow上的一些人让这个工作,但他们的代码没有发布。我正在使用
[web loadData:data MIMEType:MIMEType textEncodingName:@"UTF-8" baseURL:nil];
其中MIMEType是:
(顺便说一下,我看过DOC文件使用的是mimetype @“application / 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文件。当html文件在iPhone上的Safari中显示时,单击文件会在Safari中正确显示。
我尝试研究didFailLoadWithError(100)中显示的错误代码,但所有记录的错误代码都是负数且大于1000(如NSURLError.h中所示)。
-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"didFailLoadWithError:%@", error); }
答案 0 :(得分: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) Powerpoint(.ppt) Word(.doc)
iPhone OS 3.0支持以下其他文档类型: 富文本格式(.rtf) 富文本格式目录(.rtfd.zip) 主题演讲'09(.key) 数字'09(.numbers) Pages '09(.pages)
答案 1 :(得分: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];
}
答案 2 :(得分: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];
答案 3 :(得分:2)
您是在设备上还是仅在模拟器中试过这个?
我发现我无法让UIWebView在模拟器中显示.doc和.pages文件(但可以显示.txt和.pdf文件),但这两种文件类型在iPad和iPhone设备上加载和显示都很好。
模拟器中的错误?
格里, 瑞典
答案 4 :(得分:0)
搜索之后,我找到的解决方案是因为当我们通过将xls文件拖放到Project-&gt; Supporting Files中将xls导入Xcode时,我们需要特定“添加到目标:”,我们需要勾选要添加的项目