Сохранение файла PDF через UIWebView, чтобы он был виден (в том же WebView) даже в автономном режиме - PullRequest
0 голосов
/ 23 ноября 2011

У меня такой вопрос, который сводит меня с ума: могу ли я сохранить файл PDF (который находится в сети) локально на устройстве iOS, чтобы я мог просматривать файл каждый раз, даже в автономном режиме, в одном и том же UIWebView? Если бы я мог, как?

1 Ответ

1 голос
/ 23 ноября 2011

Если у вас есть контроль над таким UIWebView и URL, который он открывает, то да, вы можете. Смотрите следующий код в качестве примера. Он использует библиотеку ASIHttpRequest, которую вы можете найти по адресу http://allseeing -i.com / ASIHTTPRequest /

#import "WebViewPDFViewController.h"
#import <CommonCrypto/CommonDigest.h>
#import "ASIHTTPRequest.h"

@implementation WebViewPDFViewController

-(NSString *) md5:(NSString *) str {
    const char *cStr = [str UTF8String];
    unsigned char result[16];
    CC_MD5( cStr, strlen(cStr), result );

    return [NSString stringWithFormat:
        @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
        result[0], result[1], result[2], result[3], 
        result[4], result[5], result[6], result[7],
        result[8], result[9], result[10], result[11],
        result[12], result[13], result[14], result[15]
    ];  
}

-(void) viewWillAppear:(BOOL)animated {
    NSString *pdfOnlinePath = @"http://redinter.eu/web/files/revistas/2Dummy.pdf";

    // Check if the file is already stored locally. If it is not, then first
    // download it, and load from the local cache. Next requests will always
    // load from the local cache
    NSString *pdfHash = [self md5:pdfOnlinePath];
    NSString *pdfCachePath = [NSString stringWithFormat:@"%@/pdfcache_%@.pdf", 
        [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex:0], 
        pdfHash];

    if ([[NSFileManager defaultManager] fileExistsAtPath:pdfCachePath]) {
        NSLog(@"Cached file found, using it");
    }
    else {
        // Not found in the local cache, download and store it
        NSLog(@"File  not found in the local cache, going to download it");
        ASIHTTPRequest *downloadRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:pdfOnlinePath]];
        [downloadRequest setDownloadDestinationPath:pdfCachePath];
        [downloadRequest startSynchronous];
    }

    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:pdfCachePath]];

    UIWebView *webView = [[[UIWebView alloc] initWithFrame:self.view.bounds] autorelease];
    [webView loadRequest:request];

    [self.view addSubview:webView];
}

- (void)dealloc {
    [super dealloc];
}

@end

Я проверил это здесь, и он отлично работает.

...