Objective C在UIWebView中加载PDF文件

时间:2011-10-31 11:05:27

标签: objective-c file pdf webview nsdata

编辑: 我的Base64解码有问题。我搜索了一个外部Base64解码器,它就像这样工作:

情况如此: 我有一个从Web服务获得的Base64编码字节数组并将其转换为NSData:

NSData *data = [Base64 decodeBase64WithString:response];

在我的Webview控制器中,我声明:

[webview loadData:fileData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

fileData是解码数据。

当我跑步时,我得到一个灰色的屏幕。 所以我假设我没有给它一个正确的NSData对象。

5 个答案:

答案 0 :(得分:12)

我在输入时已经回答了我自己的问题。

  

所以我假设我没有给它一个正确的NSData对象。

我的Base64解码错误。

使用此语句就像魅力一样:

[webview loadData:fileData MIMEType:@"application/pdf" textEncodingName:@"utf-8" baseURL:nil];

我只是发帖,所以其他人可以看看他们有同样的问题。

答案 1 :(得分:2)

[webView loadata:data MIMEType:@"application/pdf" textEncodingName:@"UTF-8" baseURL:nil];

那应该为你做的伎俩,如果没有,你可以像V1ru8建议的那样把它写到文件中,但在大多数情况下这是一个额外的步骤。

希望这会有所帮助

答案 2 :(得分:1)

除了已经提供的答案之外,我发现在包含UIViewController的初始化函数中将NSData*加载到UIWebView不起作用,并且不会出现错误。< / p>

NSData*需要加载到UIWebView函数中的viewDidLoad

答案 3 :(得分:1)

UIWebView已弃用,请使用WKWebView https://developer.apple.com/documentation/webkit/wkwebview?language=objc

Objective-C示例:

#import <WebKit/WebKit.h>

...

CGRect screen = [[UIScreen mainScreen] bounds];
CGFloat width = CGRectGetWidth(screen);
CGFloat height = CGRectGetHeight(screen);


WKWebView *wkwebView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, width, height)];
//UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; //DEPRECATED

NSURL *targetURL = [[NSBundle mainBundle] URLForResource:@"fileName" withExtension:@"pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
//[webView loadRequest:request]; //DEPRECATED
[wkwebView loadRequest:request];

//[self.view addSubview:webView]; //DEPRECATED
[self.view addSubview:wkwebView];

答案 4 :(得分:0)

最简单的方法:

UIWebView *webview = [[UIWebView alloc] init];
[self.view addSubview:webview];
NSString *path = [[NSBundle mainBundle] pathForResource:@"pdfFileName" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webview loadRequest:request];