以编程方式从JavaScript中“在Adobe Reader中打开”

时间:2013-03-06 22:14:08

标签: javascript cordova pdf mobile safari

每当您在浏览器中打开PDF页面时,iOS Safari浏览器都会显示一个方便的选项

如果您安装了Adobe Reader,则会出现一个按钮,显示:

  

在“Adobe Reader”中打开...

但是,如果您打开隐藏HUD(地址栏等)的PDF文档,例如电话间隙应用程序,或使用以下元数据快速而脏的“添加到主屏幕应用程序”:

<meta name="apple-mobile-web-app-capable" content="yes" />
显然,按钮不会出现。

我还想在Adobe Reader中打开PDF文档。有没有人知道以编程方式执行此操作的方法?

我想在手机应用程序中包含jsPDF,并保存结果,这将是最简单的方法。

提前致谢!

3 个答案:

答案 0 :(得分:1)

在Vince Parsons(和其他人)的帮助下,我解决了这个问题。

使用PhoneGap插件,您可以创建/公开JavaScript调用,然后在Objective-c中处理。

这是你需要的两行(是的,只有两行!),以及随后的解释:

self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:myDocumentPath]];
[self.docInteractionController presentOpenInMenuFromRect:CGRectMake(0,100,1,1) inView:UIApplication.sharedApplication.keyWindow animated:YES];

说明

您的输入将是文件位置。 就我而言,它位于app沙盒中,所以看起来像是:

/var/mobile/Applications/B16-HU83-GU1D-1D3NT1F13R/Documents/DocumentToExport.pdf

如果您想使用外部网址,您可以(通过调整),但就我的目的而言,它是内部的。

所以,以我的文件位置作为输入(让我们调用我的输入变量myDocumentPath),你只需要声明一个文档控制器:

self.docInteractionController = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:myDocumentPath]];

这会使用UIDocumentInteractionController方法创建interactionControllerWithURL,该方法需要NSURL个变量。 我们使用NSURL方法创建fileURLWithPath变量,并将其传递给myDocumentPath

下一行调用presentOpenInMenuFromRect,其中包含一个矩形和一个视口:

[self.docInteractionController presentOpenInMenuFromRect:CGRectMake(0,0,1,1) inView:UIApplication.sharedApplication.keyWindow animated:YES];

矩形在位置0,0处创建,宽度和高度为0,0(GCRectMake(0,0,1,1)) 视口取自PhoneGap应用程序:UIApplication.sharedApplication.keyWindow

我感到非常高兴和惊讶,这只需要两行代码来修复。当然,没有办法只使用JavaScript,但它仍然非常优雅,而且效果很好。

答案 1 :(得分:0)

如果PDF是使用URL从服务器打开的,或者如果是从本地设备打开PDF,则可以使用PhoneGap InAppBrowser(http://docs.phonegap.com/en/2.5.0/cordova_inappbrowser_inappbrowser.md.html#InAppBrowser)打开PDF,您可以使用PDFViewer插件:https://github.com/phonegap/phonegap-plugins/tree/master/iOS/PDFViewer。< / p>

无论如何,本机默认PDF阅读器将用于打开PDF。

答案 2 :(得分:0)

我真的在寻找一个随时可用的解决方案,并且一度放弃了。 GitHub上有一些旧的存储库,有些文章建立在绿色标记答案的两行上 - 但没有什么能让我感到满意。

这就是为什么我分叉cordova-plugin-file-opener2来改变iOS的行为,这对我来说非常适合。为了允许并行使用分叉插件,我已创造性地将其重命名为cordova-plugin-file-opener3。它提供与分叉插件2.0.1版相同的功能,但在iOS上显示“Open In”-Dialog。

对插件的更改很简单。刚刚替换了一个方法调用并进行了一些重命名。不知道为什么找到一个有效的解决方案是如此困难 - 但也许我没有找到正确的方法。

您可以在此处找到存储库:

https://github.com/napolitano/cordova-plugin-file-opener3

随意使用它。

相关问题