无法下载并打开PDF文件,错误,无法在ios中找到PDF标题



我有一个应用程序,我正在从网址打开PDF文件。

我成功地在网络视图中打开它。

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

我搜索了很多,并在下面找到了最佳解决方案。

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

但是当我尝试这段代码时,它给我错误说找不到 PDF 标题:"%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];
                });
            }
        }
    }];

如果转换为字符串服务器响应,你在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.pdf .因此,如果要下载文件.pdf则必须使用此网址

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

最新更新