Событие открытия PDF-файла в приложении IOS для отображаемого URL-адреса в UIWebView

Я использую элемент управления UIWebView и открываю на нем URL-адрес веб-страницы только в альбомном режиме. По этому URL-адресу для определенного события открывается PDF-файл. На этот раз PDF-файл не открывается должным образом (всегда отображается только первая страница PDF-файла), и в окне вывода я получаю «ошибку декодирования flatedecode».

Есть ли способ, чтобы мое приложение могло уловить это событие открытия PDF, и я мог бы открыть PDf в Safari или другом браузере, а не UIWebView?

Или в Phonegap есть способ добиться этого?


person Makarand Raut    schedule 06.03.2013    source источник


Ответы (2)


Вы можете сохранить PDF-файл в каталоге документов, используя этот код

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachePath = [paths objectAtIndex:0];
BOOL isDir = NO;
NSError *error;
//You must check if this directory exist every time
if (! [[NSFileManager defaultManager] fileExistsAtPath:cachePath isDirectory:&isDir] && isDir   == NO)
{
    [[NSFileManager defaultManager] createDirectoryAtPath:cachePath withIntermediateDirectories:NO attributes:nil error:&error];
}
NSString *filePath = [cachePath stringByAppendingPathComponent:@"QRScanner.pdf"];
//webView.request.URL contains current URL of UIWebView, don't forget to set outlet for it
NSData *pdfFile = [NSData dataWithContentsOfURL:webView.request.URL];
if(pdfFile)
{
    [AppDelegate obj_appDelegate].Alertview.hidden = YES;
    [[AppDelegate obj_appDelegate].activity stopAnimating];
}
[pdfFile writeToFile:filePath atomically:YES];
person kb920    schedule 06.03.2013

Я думаю, вам нужен только способ узнать, нажата ли конкретная ссылка, открывающая PDF-файл?

Убедитесь, что вы сделали свой viewcontroller делегатом для веб-просмотра. Затем реализуйте этот метод

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType

NavigationType будет UIWebViewNavigationTypeLinkClicked, когда новая страница загружается при нажатии ссылки.

request сообщит вам открываемый URL-адрес, и вы сможете прослушать, является ли URL-адрес одним из ваших PDF-файлов. Если это так, то вы можете обработать его любым способом - загрузите его и откройте в другом веб-представлении или откройте в Safari.

Подробнее см. здесь.

person lostInTransit    schedule 06.03.2013