我正在尝试显示我在UIWebView中本地存储的PDF。这就是我目前尝试这样做的方式:
if (![[NSFileManager defaultManager] fileExistsAtPath:self.url]) {
LOG_ERROR(@"Couldn't load local file. File at path: %@ doesn't exist", self.url);
return;
}
nsurl=[NSURL fileURLWithPath:self.url];
NSData *data = [NSData dataWithContentsOfFile:self.url];
LOG_DEBUG(@"data length:%d",[data length]);
[self.webView loadData:data MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];
我也尝试过传递nil for textEncoding,以及使用UIWebView的loadRequest。结果是一个显示空白页面的UIWebView。 UIWebView委托方法中没有错误发生。奇怪的是,对于我试图显示的PDF,数据具有正确的长度(以字节为单位),这意味着正在找到并正确加载文件。
有没有人知道这里可能出现的问题或者我如何更好地调试此问题?
答案 0 :(得分:4)
您可以在下面找到两种不同的方法来打开.pdf
上的UIWebView
文件;一个来自url
,另一个来自NSData
:
if (self.pdfDataToLoad) //Loading the pdf as NSData
{
[self.webView loadData:self.pdfData
MIMEType:@"application/pdf"
textEncodingName:@"UTF-8"
baseURL:nil];
}
else //Open the pdf from a URL
{
NSURL *targetURL = [NSURL URLWithString:@"https://bitcoin.org/bitcoin.pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[self.webView loadRequest:request];
}
答案 1 :(得分:2)
事实证明这个问题与PDF的文件格式有关。我使用Illustrator编辑它们并重新保存它们。我猜Mobile Safari不喜欢Illustrator格式化文件的方式,因为当使用模拟器的浏览器查看时,每个文件都是空白的(尽管我可以在普通的Safari中打开PDF文件)。
解决方案是使用预览打开PDF并重新保存。通过预览保存例程运行每个PDF后,我能够在不更改任何代码的情况下将每个PDF显示在UIWebView中。
答案 2 :(得分:1)
您不需要NSData来加载本地文件,loadRequest应该直接使用NSURL
[self.webView loadRequest:[NSURLRequest requestWithURL:nsurl]];
我只能建议像这样制作NSURL
nsurl = [NSURL URLWithString:[self.url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
答案 3 :(得分:1)
NSData
用于在本地存储在任何目录中时加载pdf文件。
要加载应用程序中的pdf,请使用以下代码。
NSString *path = [[NSBundle mainBundle] pathForResource:@"FileNameHere"
ofType:@"pdf"];
NSURL *url = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView loadRequest:request];