0

我正在使用UIWebView控件并仅以横向模式在其上打开网页 URL。在特定事件的此 URL 中,正在打开 PDF。这次 PDF 没有正确打开(它总是只显示 PDF 文件的第一页),并且在输出窗口中我收到“flatedecode 解码错误”。

有什么方法可以让我的应用程序捕获该 PDF 打开事件,并且我可以在 Safari 或其他浏览器中打开 PDf 而不是UIWebView

或者Phonegap有什么办法可以做到这一点?

4

2 回答 2

0

我想您只需要一种方法来确定是否单击了打开 PDF 的特定链接?

确保你让你的 viewcontroller 成为 webview 的代表。然后实现这个方法

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

当点击链接时加载新页面时,navigationType将为UIWebViewNavigationTypeLinkClicked 。

request将告诉您正在打开的 URL,如果 URL 是您的 PDF 之一,您可以收听。如果是,那么您可以按照您想要的方法处理它 - 下载它并在另一个 Web 视图中打开或在 safari 中打开。

更多细节在这里

于 2013-03-06T11:27:40.670 回答
-1

您可以使用此代码将 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];
于 2013-03-06T11:06:39.713 回答