使用 webView ios 显示下载的 PDF 文件
Posted
技术标签:
【中文标题】使用 webView ios 显示下载的 PDF 文件【英文标题】:Show downloaded PDF file with webView ios 【发布时间】:2014-05-18 21:58:36 【问题描述】:我正在制作一个 iPhone 应用程序,它将下载 PDF 文件并将其显示在 webView 中。 但是我的脚本不会显示下载的 PDF。它确实会下载并保存在 Documents 中,但 webView 不会显示它。
这是我的脚本:
NSString *path = [[NSBundle mainBundle] pathForResource:@"3" ofType:@"pdf"];
NSURL *urlen = [NSURL fileURLWithPath:path];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:urlen];
[webView loadRequest:urlRequest];
[webView setScalesPageToFit:YES];
【问题讨论】:
实际发生了什么?你有任何错误吗?有什么显示吗? 嗨,是的,忘了写它们... ;-) 我得到:“线程 1:信号 SIGABRT” 如果我从头开始将 pdf 文件放在 ind 文件夹中,但当我下载来自网络的pdf,它会出错...... 有更多与该错误相关的信息......它实际上发生在哪一行?实际的堆栈跟踪是什么? 首先,我对这种代码很陌生,所以希望我不要问愚蠢!?但它向我显示“线程 1:...”已打开的行: NSURL *urlen = [NSURL fileURLWithPath:path]; 它写道:DiskImageCache:无法解析旧目录的绝对路径。 *** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“*** -[NSURL initFileURLWithPath:]: nil string parameter” 【参考方案1】:来自NSURL
official documentation on NSURL
的官方文档。
将nil
作为fileURLWithPath:
的参数发送会产生异常。
那么问题实际上出在[[NSBundle mainBundle] pathForResource:ofType:]
上。这将返回 nil
,而不是文件的实际路径。
这里的问题实际上是[NSBundle mainBundle]
指的是与您的应用程序捆绑在一起的文件。您需要查看应用的文档目录,该目录存储已下载的文件。
此方法将为您提供应用文档目录的路径:
NSString* documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
现在,只需将文件名附加到此路径:
NSString *pdfPath = [documentsPath stringByAppendingPathComponent:@"3.pdf"];
为了更好地衡量(因为崩溃总是不好的),请确保文件存在:
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:pdfPath];
然后这样结束:
if (fileExists)
NSURL *urlen = [NSURL fileURLWithPath:pdfPath];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:urlen];
[webView loadRequest:urlRequest];
[webView setScalesPageToFit:YES];
else
// probably let the user know there's some sort of problem
【讨论】:
该死的,你很好……!它有效,非常感谢。最近几天我试图解决这个问题,现在它可以工作了!!非常感谢..以上是关于使用 webView ios 显示下载的 PDF 文件的主要内容,如果未能解决你的问题,请参考以下文章
在 WebView 问题中查看 PDF (Xamarin.ios)
在 WebView 中使用 QLViewController 查看 PDF
生成PDF,但在swift ios的webView中未检索到文件