使用loadData在UIWebView中显示PDF

时间:2010-12-09 09:11:34

标签: pdf uiwebview nsdata

我正在尝试显示我在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,数据具有正确的长度(以字节为单位),这意味着正在找到并正确加载文件。

有没有人知道这里可能出现的问题或者我如何更好地调试此问题?

4 个答案:

答案 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];