Отображение ppt, doc и xls в UIWebView не работает, но pdf делает - PullRequest
11 голосов
/ 26 марта 2010

Похоже, что несколько человек в 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); }

Ответы [ 5 ]

9 голосов
/ 22 апреля 2010

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

-(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 поддерживает следующие дополнительные типы документов: Rich Text Format (.rtf) Каталог форматированного текста (.rtfd.zip) Keynote '09 (.key) Numbers '09 (.numbers) Страницы '09 (.pages)

7 голосов
/ 28 октября 2010

Единственный способ прочитать объект 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 голосов
/ 19 марта 2011
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];
2 голосов
/ 29 октября 2010

Вы пробовали это на устройстве или только в симуляторе?

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

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

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

0 голосов
/ 28 июля 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...