Objective C在UIWebView中加载PDF文件

问题描述 投票:5回答:5

编辑:我的Base64解码有问题。我搜索了一个外部Base64解码器,它的工作原理如下:

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

NSData *data = [Base64 decodeBase64WithString:response];

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

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

fileData是解码数据。

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

objective-c file pdf webview nsdata
5个回答
12
投票

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

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

我的Base64解码错了。

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

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

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


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

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

希望这会有所帮助


1
投票

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

NSData*needs将加载到UIWebView函数中的viewDidLoad


1
投票

UIWebView是DEPRECATED,使用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];

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];
© www.soinside.com 2019 - 2024. All rights reserved.