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

时间:2014-02-19 08:10:14

标签: ios objective-c pdf ios7 webview

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

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

现在我想下载该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。

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

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

很抱歉给您带来不便。

请帮助我。

2 个答案:

答案 0 :(得分:3)

试试此代码下载&保存您的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];
                });
            }
        }

    }];

答案 1 :(得分:0)

如果转换为字符串服务器响应,即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文件,则必须使用此URL

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