Отображение ppt, doc и xls в UIWebView не работает, но pdf

Похоже, что несколько человек в stackoverflow заставляют это работать, но их код не размещен. Я использую

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

где MIMEType:

  • @ "приложения/vnd.ms-PowerPoint"
  • @ "приложения/vnd.ms-слово"
  • @ "применение/vnd.ms-первенствует"

(Кстати, я видел, что файлы 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: это нормально.

Значит, мои миметики плохие?

И чтобы убедиться, что файлы PPT, DOC и XLS действительно выглядят нормально, я создал простой файл html с привязными тегами к файлам. Когда html файл отображается в Safari на iPhone, щелчок по файлам отображается правильно в Safari.

Я попытался исследовать код ошибки, отображаемый в файле didFailLoadWithError (100), но все документированные коды ошибок отрицательны и больше 1000 (как видно из NSURLError.h).

-(void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error { NSLog(@"didFailLoadWithError:%@", error); }

Ответ 1

Вы пытались использовать следующий документированный метод?:

-(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.zip) Страницы (.pages.zip) PDF (.pdf) Powerpoint (.ppt) Word (.doc)

iPhone OS 3.0 поддерживает следующие типы документов: Формат Rich Text (.rtf) Каталог Rich Text Format (.rtfd.zip) Keynote '09 (.key) Числа '09 (.numbers) Страницы '09 (.pages)

Ответ 2

Единственный способ найти объект 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];
}

Ответ 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];

Ответ 4

Пробовал ли вы это на устройстве или в симуляторе?

Я нахожу, что я не могу заставить UIWebView отображать документы в формате .doc и .pages в симуляторе (но может отображать .txt и .pdf), но оба типа файлов загружаются и отображаются как на iPad, так и на iPhone.

Ошибка в симуляторе?

Грегор, Швеция

Ответ 5

После поиска решение, которое я нашел, было потому, что, когда мы импортируем xls в Xcode, перетащив файл xls в файл Project- > Supporting Files, нам нужно указать "Добавить в целевые объекты:", нам нужно отметить проект добавить