【问题标题】:PDF opening event in IOS app for rendered URL on UIWebViewIOS 应用程序中的 PDF 打开事件,用于在 UIWebView 上呈现 URL
【发布时间】:2013-03-06 11:02:37
【问题描述】:
我正在使用UIWebView 控件并仅以横向模式在其上打开网页 URL。在特定事件的此 URL 中,正在打开 PDF。这次 PDF 没有正确打开(它总是只显示 PDF 文件的第一页),并且在“输出”窗口中我收到“flatedecode 解码错误”。
有什么方法可以让我的应用程序捕捉到 PDF 打开事件,并且我可以在 Safari 或其他浏览器中打开 PDf,而不是 UIWebView?
或者Phonegap有什么方法可以做到这一点?
【问题讨论】:
标签:
iphone
ios
ipad
cordova
cordova-2.0.0
【解决方案1】:
我猜你只需要一种方法来找出打开 PDF 的特定链接是否被点击?
确保你的 viewcontroller 成为 webview 的代理。然后实现这个方法
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
当点击链接时加载新页面时,
navigationType 将为 UIWebViewNavigationTypeLinkClicked。
request 将告诉您正在打开的 URL,如果该 URL 是您的 PDF 之一,您可以收听。如果是,那么您可以按照您想要的方法处理它 - 下载它并在另一个 Web 视图中打开或在 safari 中打开。
更多详情here.
【解决方案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];