No se pudo encontrar el encabezado de PDF: `% PDF 'no encontrado

Recibo este logging cuando bash cargar un pdf y no sé por qué.

failed to find PDF header: `%PDF' not found. 

suyo mi código:

 - (void)viewDidLoad { [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://webdesign-schoenefeld.de/es-app/heute.pdf"]]]; NSLog(@"---------------pdfloading....,------------------------"); [webview addSubview:activityind]; timer = [NSTimer scheduledTimerWithTimeInterval:(1.0/2.0) target:self selector:@selector(loading) userInfo:nil repeats:YES]; [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } 

Yo uso Xcode 6 Beta 5 y iOS 8 beta 5.

Gracias por tu ayuda.

Actualización el 9 de septiembre de 2014: iOS8 GM solucionó este problema para las aplicaciones con las que estoy trabajando.

Respuesta anterior al SEP 9 de 2014 Se informa como un error conocido de Apple en las notas de lanzamiento de iOS8 Beta 5. https://developer.apple.com/library/prerelease/ios/releasenotes/General/RN-iOSSDK-8.0/ https://devforums.apple.com/message/1017919#1017919

Deberíamos esperar el próximo lanzamiento y ver si está arreglado.

Estoy de acuerdo, parece haber un error (o cambio de comportamiento) en iOS 8 beta 5, lo que significa que su código ya no funciona (y fue válido. Tengo lo mismo y funcionó bien hasta iOS 8 beta 4) .

Creo que hay un problema con la detección de types porque si hago lo siguiente, funciona:

 NSLog(@"About to request PDF document loading..."); NSData *pdfData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:urlStr]]; [self.webView loadData:pdfData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil]; 

Ahora ese bit de código no debe usarse "tal cual", ya que es sincrónico.

Siento que la respuesta de Nithin fue válida, pero no responde al problema visto específicamente con iOS 8 beta 5. El código principal es el mismo y golpeará el mismo error de iOS.

Esto funciono para mi 👊👍

 NSURL *targetURL = [NSURL fileURLWithPath:pdfFilePath]; // <pdfFilePath> if full path of your pdf file NSData *pdfData = [[NSData alloc] initWithContentsOfURL:targetURL]; [self.webview loadData:pdfData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil]; 

Tuve el mismo problema en iOS 8 beta 5. El código como https://stackoverflow.com/a/25302602/2639006 funciona, pero recomendaría agregar el último parámetro de baseURL, porque los enlaces de documento pdf interno no funcionan sin él .

 NSString *path = [[NSBundle mainBundle] pathForResource:@"pdf_NAME"ofType:@"pdf"]; NSURL *targetURL = [NSURL fileURLWithPath:path]; NSData *pdfData = [[NSData alloc] initWithContentsOfURL:targetURL]; [self.webView loadData:pdfData MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:targetURL]; 

He estado latiéndome sobre este problema en particular durante años, y finalmente encontré la respuesta hoy. Siempre he encontrado que algunos files PDF se abren bien en iOS (ya sea con un código como el suyo que intenta cargarlo en una UIWebview o utilizando el método canOpenUrl:) de UIApplications, pero otros no se pueden abrir en absoluto.

Básicamente, el PDF debe tener un encabezado / pie de página configurado para poder ser abierto por iOS (técnicamente, en realidad, solo Safari tiene este problema, ya que Quicklook y Acrobat Reader pueden manejar files PDF sin encabezado en los devics sin ningún problema).

Me encontré con este post de error al enviar un documento PDF que generé a la impresora (al less en el simulador). Lo conseguí al agregar un título al documento PDF al suministrar un CFDictionary en lugar de nil como el último parámetro para build el context de pdf. Aquí está la ayuda de Swift 3.0:

  let infoDict : CFDictionary = [kCGPDFContextTitle as String : "myTitleHere"] as CFDictionary // Add title to PDF let pdfData = NSMutableData() if let dataConsumer : CGDataConsumer = CGDataConsumer(data: pdfData) { let myMediaBox = CGRect(x: 0, y: 0, width: page.pageWidth, height: page.pageHeight) if let pdfContext = CGContext(consumer: dataConsumer, mediaBox: &myMediaBox, infoDict) { // .... more pdf stuff } } 

Estoy teniendo el mismo problema al build una aplicación fuera del iOS 8 SDK y Xcode 6. Mi problema fue que NSXMLParser estaba llamando al método foundCharacters dos veces en mi label seleccionada. Me di count de esto comprobando si mis datos de cadenas eran múltiplos de 4, de modo que incluso podría intentar convertirlos a un object de datos codificado base 64. Una vez que descubrí que el método se llamaba dos veces, pensé que al concatenar las cadenas se producirían los datos correctos:

 - (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string { if([self.currentElement isEqualToString:kWarrantyPDFXMLTagDocumentData]) { if (self.combinedDocumentString == nil || self.combinedDocumentString.length == 0) { self.combinedDocumentString = string; } else { self.combinedDocumentString = [self.combinedDocumentString stringByAppendingString:string]; } if (![self stringIsBase64:self.combinedDocumentString]) { return; } pdfData = [[NSData alloc] initWithData:[NSData base64DataFromString:self.combinedDocumentString]]; // If you want to save your PDF, do so here. NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *path = [documentsDirectory stringByAppendingPathComponent:@"test.pdf"]; [pdfData writeToFile:path atomically:YES]; } } - (BOOL)stringIsBase64:(NSString *)str { if ([str length] % 4 == 0) { static NSCharacterSet *invertedBase64CharacterSet = nil; if (invertedBase64CharacterSet == nil) { invertedBase64CharacterSet = [[NSCharacterSet characterSetWithCharactersInString: @"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="] invertedSet]; } return [str rangeOfCharacterFromSet:invertedBase64CharacterSet options:NSLiteralSearch].location == NSNotFound; } return NO; }