在UIWebView中显示ppt,doc和xls不起作用,但pdf可以

时间:2010-03-25 23:20:46

标签: iphone iphone-sdk-3.0

看起来像stackoverflow上的一些人让这个工作,但他们的代码没有发布。我正在使用

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

其中MIMEType是:

  • @ “应用程序/ vnd.ms-简报”
  • @ “应用程序/ vnd.ms字”
  • @ “应用程序/ vnd.ms-EXCEL”

(顺便说一下,我看过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); }

5 个答案:

答案 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时,我们需要特定“添加到目标:”,我们需要勾选要添加的项目