当前位置:  开发笔记 > 前端 > 正文

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

如何解决《在UIWebView中显示ppt,doc和xls不起作用,但pdf可以》经验,为你挑选了2个好方法。

看起来像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: 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); }

james_womack.. 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)Keynote(.key.zip)Numbers(.numbers.zip)Pages(.pages.zip)PDF(.pdf)Powerpoint(.ppt)Word(. DOC)

iPhone OS 3.0支持以下其他文档类型:RTF格式(.rtf)富文本格式目录(.rtfd.zip)Keynote '09(.key)Numbers '09(.numbers)Pages '09(.pages)



1> james_womack..:

您是否尝试过使用以下记录的方法?:

-(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)Keynote(.key.zip)Numbers(.numbers.zip)Pages(.pages.zip)PDF(.pdf)Powerpoint(.ppt)Word(. DOC)

iPhone OS 3.0支持以下其他文档类型:RTF格式(.rtf)富文本格式目录(.rtfd.zip)Keynote '09(.key)Numbers '09(.numbers)Pages '09(.pages)



2> Noya..:

我发现读取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];
}

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有