2010-03-25 17 views
11

Parece que algunas personas en stackoverflow hacen que esto funcione, pero su código no se publica. Estoy usandoMostrar ppt, doc y xls en UIWebView no funciona, pero el pdf hace

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

donde MIMEType es:

  • @ "application/vnd.ms-powerpoint"
  • @ "application/vnd.ms-palabra"
  • @ "aplicación /vnd.ms-excel"

(archivos DOC por cierto, que he visto usan mimetype @ 'aplicación/pdf', pero el 'dong' versión parece más apropiado. he intentado tanto por si acaso.)

He verificado que mis "datos" son correctos. Los archivos PDF y TXT funcionan. Cuando UIWebView muestra archivos PPT, DOC o XLS, está en blanco. Puse declaraciones NSLOG en mis llamadas 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" 

obviamente la carga está fallando, pero ¿por qué? Si cambio mi mimetype a @ "text/plain" para un archivo PPT, UIWebView se carga bien y muestra caracteres no imprimibles, como se esperaba. Eso me dice que los 'datos' pasaron a loadData: está bien.

¿Significado mis tipos de mimet son malos?

Y para asegurarme de que mis archivos PPT, DOC y XLS están realmente bien para mostrar, creé un archivo html simple con etiquetas de anclaje para los archivos. Cuando el archivo html se muestra en Safari en el iPhone, al hacer clic en los archivos se muestra correctamente en Safari.

Intenté investigar el código de error que se muestra en didFailLoadWithError (100) pero todos los códigos de error documentados son negativos y superiores a 1000 (como se ve en NSURLError.h).

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

Respuesta

9

¿Ha intentado utilizar el siguiente método documentado ?:

-(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]; 

Funciona para éstos en el iPhone OS 2.2.1: Excel (.xls) Keynote (.key.zip) números (.numbers.zip) Páginas (.pages.zip) PDF (.pdf) Powerpoint (.ppt) Word (.doc)

iPhone OS 3.0 sup puertos de estos tipos de documentos adicionales: formato de texto enriquecido (.rtf) formato de texto Directorio enriquecido (.rtfd.zip) Keynote '09 (.key) Numbers '09 (.numbers) Pages '09 (.páginas)

+0

Sí, he utilizado loadRequest y funciona bien cuando tengo el archivo adjunto como parte de mi proyecto. Lo hice solo por probar para asegurarme de que mis archivos estaban bien. Sin embargo, en mi aplicación real, el archivo se descarga de un servidor y todo lo que tengo es NSData. – slugolicious

+0

No se puede usar NSURL * url = [NSURL fileURLWithPath: ruta]; y NSURLRequest * request = [NSURLRequest requestWithURL: url]; para descargar desde tu servidor? Puedo. ¿Hay algún motivo por el que no pueda cargar la URL del archivo en su servidor? –

+0

Este método funciona muy bien, ¡¡aplausos !!! – AdamM

7

La única forma en que encontré para leer un objeto de Office (probado con .doc o .xls) es guardar el objeto NSData en un archivo temporal y luego leerlo.

-(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]; 
    } 
} 

entonces se puede eliminar el archivo dentro del método UIWebViewDelegate:

- (void)webViewDidFinishLoad:(UIWebView *)webView{ 
    NSString *path = [NSString stringWithFormat:@"%@temp.%@",NSTemporaryDirectory(),extension]; 
    [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; 
} 
+0

¡Esto funciona mejor para mí! – MobileMon

2

¿Usted intentó esto en el dispositivo o en sólo en el simulador?

Me parece que no puedo obtener UIWebView para mostrar documentos .doc y .pages en el simulador (pero puede visualizar archivos .txt y .pdf), pero ambos tipos de archivos se cargan y se muestran bien tanto en el iPad como en el iPhone .

Error en el simulador?

Gregor, Suecia

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]; 
+0

Está funcionando .. Gracias – Muzammil

0

Después de buscar a través, la solución que encontré fue porque cuando importar archivos XLS en Xcode mediante arrastrar y soltar el archivo XLS en Proyecto-> Apoyo Archivos, necesitamos específica del 'Agregar a destinos:', necesitamos marcar el proyecto para agregar

Cuestiones relacionadas