我们可以在 iOS 上使用 UIWebView 打开 pdf 文件吗?

Posted

技术标签:

【中文标题】我们可以在 iOS 上使用 UIWebView 打开 pdf 文件吗?【英文标题】:Can we open pdf file using UIWebView on iOS? 【发布时间】:2011-02-19 09:47:37 【问题描述】:

我们可以从 UIWebView 打开 pdf 文件吗?

【问题讨论】:

【参考方案1】:

是的,这可以通过 UIWebView 完成。

如果您尝试显示驻留在某处服务器上的 PDF 文件,您可以直接将其加载到 Web 视图中:

Objective-C

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];

NSURL *targetURL = [NSURL URLWithString:@"https://www.example.com/document.pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];

[self.view addSubview:webView];

斯威夫特

let webView = UIWebView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))

let targetURL = NSURL(string: "https://www.example.com/document.pdf")! // This value is force-unwrapped for the sake of a compact example, do not do this in your code
let request = NSURLRequest(URL: targetURL)
webView.loadRequest(request)

view.addSubview(webView)

或者,如果您的应用程序捆绑了一个 PDF 文件(在本示例中名为“document.pdf”):

Objective-C

UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];

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

[self.view addSubview:webView];

斯威夫特

let webView = UIWebView(frame: CGRect(x: 10, y: 10, width: 200, height: 200))

let targetURL = NSBundle.mainBundle().URLForResource("document", withExtension: "pdf")! // This value is force-unwrapped for the sake of a compact example, do not do this in your code
let request = NSURLRequest(URL: targetURL)
webView.loadRequest(request)

view.addSubview(webView)

您可以在此处找到更多信息:Technical QA1630: Using UIWebView to display select document types。

【讨论】:

非常感谢...阿列斯。我们可以将它保存在 iPhone 的本地文档目录中吗? 是的,这是可能的,但是您必须使用除 WebView 之外的其他方法来获取文档。在 Stack Overflow 上搜索它。例如:***.com/questions/2102267/… 这里是否可以提供打印选项 这里的pdf页面是垂直列出的。是否可以水平显示,不垂直滚动。 @MartinAlléus:你能帮我解决这个问题吗***.com/questions/21874538/…【参考方案2】:

UIWebviews 也可以使用loadData 方法加载.pdf,如果你获取它为NSData

[self.webView loadData:self.pdfData 
              MIMEType:@"application/pdf" 
      textEncodingName:@"UTF-8" 
               baseURL:nil];

【讨论】:

【参考方案3】:

用它在 webview 中打开 pdf 文件

NSString *path = [[NSBundle mainBundle] pathForResource:@"mypdf" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
UIWebView *webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 300, 300)];
[[webView scrollView] setContentOffset:CGPointMake(0,500) animated:YES];
[webView stringByEvaluatingjavascriptFromString:[NSString stringWithFormat:@"window.scrollTo(0.0, 50.0)"]];
[webView loadRequest:request];
[self.view addSubview:webView];
[webView release];

【讨论】:

【参考方案4】:
NSString *folderName=[NSString stringWithFormat:@"/documents/%@",[tempDictLitrature objectForKey:@"folder"]];
NSString *fileName=[tempDictLitrature objectForKey:@"name"];
[self.navigationItem setTitle:fileName];
NSString *type=[tempDictLitrature objectForKey:@"type"];

NSString *path=[[NSBundle mainBundle]pathForResource:fileName ofType:type inDirectory:folderName];

NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
webView=[[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 1024, 730)];
[webView setBackgroundColor:[UIColor lightGrayColor]];
webView.scalesPageToFit = YES;

[[webView scrollView] setContentOffset:CGPointZero animated:YES];
[webView stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"window.scrollTo(0.0, 50.0)"]];
[webView loadRequest:request];
[self.view addSubview:webView];

【讨论】:

请先创建 pdf 的路径并将其转换为 url 并使用此代码加载 web 视图,它对我有用,所以请在您的代码中使用相同的代码【参考方案5】:

Swift 版本:

if let docPath = NSBundle.mainBundle().pathForResource("sample", ofType: "pdf") 
    let docURL = NSURL(fileURLWithPath: docPath)
    webView.loadRequest(NSURLRequest(URL: docURL))

【讨论】:

【参考方案6】:

Martin Alléus 的答案更新,无论是手机还是 iPad,无需硬编码即可获得全屏:

CGRect rect = [[UIScreen mainScreen] bounds];
CGSize screenSize = rect.size;
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,screenSize.width,screenSize.height)];

NSString *path = [[NSBundle mainBundle] pathForResource:@"pdf" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];

[self.view addSubview:webView];

【讨论】:

【参考方案7】:

斯威夫特 4

     let webView = UIWebView(frame: view.bounds)
    let targetURL = Bundle.main.url(forResource: "sampleFileName", withExtension: "pdf")
    let request = URLRequest(url: targetURL!)
    webView.loadRequest(request)
    view.addSubview(webView)

【讨论】:

【参考方案8】:
NSString *path = [[NSBundle mainBundle] pathForResource:@"document" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];

【讨论】:

【参考方案9】:
UIWebView *pdfWebView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];

NSURL *targetURL = [NSURL URLWithString:@"http://unec.edu.az/application/uploads/2014/12/pdf-sample.pdf"];
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
    [pdfWebView loadRequest:request];
    [self.view addSubview:pdfWebView];

【讨论】:

【参考方案10】:

WKWebView:我发现这个问题是让人们知道他们应该开始使用 WKWebview 的最佳地点,因为 UIWebView 现在 已弃用 .

目标 C

WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame];
webView.navigationDelegate = self;
NSURL *nsurl=[NSURL URLWithString:@"https://www.example.com/document.pdf"];
NSURLRequest *nsrequest=[NSURLRequest requestWithURL:nsurl];
[webView loadRequest:nsrequest];
[self.view addSubview:webView];

斯威夫特

let myURLString = "https://www.example.com/document.pdf"
let url = NSURL(string: myURLString)
let request = NSURLRequest(URL: url!)  
let webView = WKWebView(frame: self.view.frame)
webView.navigationDelegate = self
webView.loadRequest(request)
view.addSubview(webView)

我没有直接从 Xcode 复制这段代码,所以它可能包含一些语法错误。使用时请检查。

【讨论】:

以上是关于我们可以在 iOS 上使用 UIWebView 打开 pdf 文件吗?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 iOS 上使用 UIWebView 打开 pdf 文件吗?

从 Documents 目录在 UIWebview 中打开时,ios-css 和 js 无法在 html 文件中链接

【iOS】WKWebView使用Cookies遇到的坑

使用没有alertView的UIWebView在iOS中以编程方式进行电话呼叫

iOS 11 UIWebView 下拉菜单在 iPad 上完全损坏 - UIPopoverController

iOS应用程序因苹果应用商店而被拒绝,因为UIWebview