我正在使用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];