我正在使用UIWebView
控件并仅以横向模式在其上打开网页 URL。在特定事件的此 URL 中,正在打开 PDF。这次 PDF 没有正确打开(它总是只显示 PDF 文件的第一页),并且在输出窗口中我收到“flatedecode 解码错误”。
有什么方法可以让我的应用程序捕获该 PDF 打开事件,并且我可以在 Safari 或其他浏览器中打开 PDf 而不是UIWebView
?
或者Phonegap有什么办法可以做到这一点?
我正在使用UIWebView
控件并仅以横向模式在其上打开网页 URL。在特定事件的此 URL 中,正在打开 PDF。这次 PDF 没有正确打开(它总是只显示 PDF 文件的第一页),并且在输出窗口中我收到“flatedecode 解码错误”。
有什么方法可以让我的应用程序捕获该 PDF 打开事件,并且我可以在 Safari 或其他浏览器中打开 PDf 而不是UIWebView
?
或者Phonegap有什么办法可以做到这一点?
我想您只需要一种方法来确定是否单击了打开 PDF 的特定链接?
确保你让你的 viewcontroller 成为 webview 的代表。然后实现这个方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
当点击链接时加载新页面时,navigationType将为UIWebViewNavigationTypeLinkClicked 。
request将告诉您正在打开的 URL,如果 URL 是您的 PDF 之一,您可以收听。如果是,那么您可以按照您想要的方法处理它 - 下载它并在另一个 Web 视图中打开或在 safari 中打开。
更多细节在这里。
您可以使用此代码将 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];