在 WebView 中使用 QLViewController 查看 PDF
Posted
技术标签:
【中文标题】在 WebView 中使用 QLViewController 查看 PDF【英文标题】:Viewing a PDF with QLViewController in a WebView 【发布时间】:2013-10-18 22:10:04 【问题描述】:基本上,我想在我的 Web 视图中单击一个按钮,该按钮将从远程网站下载 PDF 并使用关闭/返回按钮显示它。我正在使用 QLViewController,因此人们可以捏缩放 PDF,并且我正在使用 PhoneGap 3.0 和 XCode 5 对其进行编码。
这是我的插件的代码,它将显示带有后退按钮的新视图,但我似乎无法显示 PDF。有什么想法吗?
#import "PDFViewer.h"
#import <Cordova/CDV.h>
@implementation PDFViewer
- (void)loadRemotePdf:(CDVInvokedUrlCommand*)command
CDVPluginResult* pluginResult = nil;
NSString *website = [command.arguments objectAtIndex:0];
NSString *filename = [command.arguments objectAtIndex:1];
if (website != nil && [website length] > 0)
CGRect rect = [[UIScreen mainScreen] bounds];
CGSize screenSize = rect.size;
UIWindow *window = [[UIApplication sharedApplication] keyWindow];
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(0,0,screenSize.width,screenSize.height)];
webView.autoresizesSubviews = YES;
[webView canGoBack];
webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
// NSURL *myUrl = [NSURL URLWithString:website];
// NSURLRequest *myRequest = [NSURLRequest requestWithURL:myUrl];
// [webView loadRequest:myRequest];
// [window addSubview: webView];
NSURL *url = [NSURL URLWithString:website];
NSData *urlData = [NSData dataWithContentsOfURL:url];
if ( urlData )
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory, filename];
[urlData writeToFile:filePath atomically:YES];
// Create test view controller
QLPreviewController *previewer = [[QLPreviewController alloc] init];
previewer.dataSource = self;
previewer.delegate = self;
// Create navigation controller
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:previewer];
[window addSubview: [nav view]];
[window makeKeyAndVisible];
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
else
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR];
// return result
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
#pragma mark - QLPreviewControllerDataSource
- (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller
return 1;
- (id <QLPreviewItem>) previewController: (QLPreviewController *) controller previewItemAtIndex: (NSInteger) index;
NSURL *fileURL = [NSURL fileURLWithPath: filePath];
return fileURL;
@end
【问题讨论】:
仅使用xcode 标签来回答有关 IDE 本身的问题。谢谢! 【参考方案1】:是的,这可以通过 UIWebView 完成。
如果您尝试显示驻留在某处服务器上的 PDF 文件,您可以简单地将其直接加载到您的 Web 视图中:
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
NSURL *targetURL = [NSURL URLWithString:@"http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UIWebView_Class/UIWebView_Class.pdf"];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];
[self.view addSubview:webView];
[webView release];
//或者如果您的应用程序捆绑了一个 PDF 文件(在本示例中名为“document.pdf”):
UIWebView *webView = [[UIWebView alloc] initWithFrame:CGRectMake(10, 10, 200, 200)];
NSString *path = [[NSBundle mainBundle] pathForResource:@"document" ofType:@"pdf"];
NSURL *targetURL = [NSURL fileURLWithPath:path];
NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
[webView loadRequest:request];
[self.view addSubview:webView];
[webView release];
【讨论】:
我一开始就尝试过这样做(上面已经注释掉了),但它缺少放大/缩小并且不显示关闭按钮。许多人建议使用 QLPreviewController 来获得这些功能。所以基本上我想了解如何让 PDF 显示在网络视图上,然后关闭以返回它。以上是关于在 WebView 中使用 QLViewController 查看 PDF的主要内容,如果未能解决你的问题,请参考以下文章
使用chrome开发者工具在原生安卓应用中调试WebView
使用flutter_webview_plugin加载页面后如何在WebView中执行JavaScript代码