无法下载并打开PDF文件,错误未能在ios中findPDF头

我有一个应用程序,我从一个URL打开PDF文件。

我成功地能够在webView中打开它。

现在我想下载该PDF文件并将其保存在我的文档文件夹中,并且希望将该PDF文件发送到我的邮件中。

我search了很多,发现下面的最佳解决scheme。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES); NSString *documentsPath = [paths objectAtIndex:0]; NSString *filePath = [documentsPath stringByAppendingPathComponent:@"myfile.pdf"]; if(![[NSFileManager defaultManager] fileExistsAtPath:filePath]){ NSData *pdfData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIWebView_Class/UIWebView_Class.pdf"]]; //Store the downloaded file in documents directory as a NSData format [pdfData writeToFile:filePath atomically:YES]; } NSURL *url = [NSURL fileURLWithPath:filePath]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [webView setUserInteractionEnabled:YES]; [webView setDelegate:self]; webView.scalesPageToFit = YES; [webView loadRequest:requestObj]; 

但是,当我尝试这个代码,它给了我错误说失败findPDF头:`%PDF'找不到

我甚至无法打开我的PDF也。

我知道同样的问题,但我现在无法解决这个错误。

我不知道我在这里做错了什么。

抱歉给你带来不便。

请帮我解决一下这个。

试试这个代码下载和保存您的PDF文件

  UIActivityIndicatorView *indicator=[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray]; [indicator startAnimating]; NSLog(@"Downloading Started"); NSString *urlToDownload = @"http://gradcollege.okstate.edu/sites/default/files/PDF_linking.pdf"; NSURL *url = [NSURL URLWithString:urlToDownload]; NSURLRequest *request=[[NSURLRequest alloc] initWithURL:url cachePolicy:NSURLCacheStorageAllowed timeoutInterval:120.0f]; [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) { [indicator stopAnimating]; if (!connectionError) { if ( data ) { NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0]; NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"myfile.pdf"]; //saving is done on main thread dispatch_async(dispatch_get_main_queue(), ^{ [data writeToFile:filePath atomically:YES]; NSLog(@"File Saved !"); NSURL *url = [NSURL fileURLWithPath:filePath]; NSURLRequest *requestObj = [NSURLRequest requestWithURL:url]; [_rssWebView setUserInteractionEnabled:YES]; //[_rssWebView setDelegate:self]; [_rssWebView loadRequest:requestObj]; }); } } }]; 

如果转换为string服务器响应,你得到NSData *pdfData ,你会看到下一个:

 <!DOCTYPE html> <html> <head> <title>iOS Developer Library</title> <meta charset="utf-8"> <script> var content_page = "navigation"; var href = window.location.href; if (window.location.href.match('#')) { var newhref = href.replace('#', ''); newhref = newhref.replace('%23', '#'); window.location.href = newhref; } else { console.log(content_page); console.log(content_page.match("content_page")); if(content_page.match("content_page")) { window.location.href = './navigation'; } else { window.location.href = "./" + content_page; } } </script> </head> <body> </body> <script type="text/javascript" src="/library/webstats/pagetracker.js"></script> <script type="text/javascript"> if(typeof PageTracker !== 'undefined') { if(window.addEventListener) { window.addEventListener("load", function(){PageTracker.logPageLoad()},false); } else if(window.attachEvent) { window.attachEvent("onload",function(){PageTracker.logPageLoad()}); } } </script> </html> 

这个唯一的网页,正如我可以假设的那样,将会转发给你另一个URI的文档: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/UIWebView_Class.pdfhttps://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/UIWebView_Class.pdf 。 所以你必须使用这个url,如果你想下载.pdf文件

另外 ,请注意@ pawan的答案,并使用他的方法来避免主线程中的下载文件