在 AIR 中添加 PDF 内容Adobe AIR 1.0 和更高版本 Adobe® AIR® 中运行的应用程序不仅可以呈现 SWF 和 HTML 内容,而且还能呈现 PDF 内容。AIR 应用程序使用 HTMLLoader 类、WebKit 引擎和 Adobe® Reader® 浏览器插件来呈现 PDF 内容。在 AIR 应用程序中,PDF 内容可以沿应用程序的全高和全宽进行拉伸,也可以作为界面的一部分。Adobe Reader 浏览器插件控制 AIR 应用程序中的 PDF 文件显示。对 Reader 工具栏界面(例如控件的位置、定位和可见性)的修改仍然存在于对 AIR 应用程序和浏览器中的 PDF 文件的后续查看中。 重要说明: 要在 AIR 中呈现 PDF 内容,用户必须安装 Adobe Reader 或 Adobe® Acrobat® 版本 8.1 或更高版本。
检测 PDF 功能如果用户没有 Adobe Reader 或 Adobe Acrobat 8.1 或更高版本,则无法在 AIR 应用程序中显示 PDF 内容。若要检测用户是否能够呈现 PDF 内容,请首先检查 HTMLLoader.pdfCapability 属性。此属性设置为 HTMLPDFCapability 类的以下常量之一:
在 Windows 上,如果用户的系统上运行的是 Adobe Acrobat 或 Adobe Reader 版本 7.x 或更高版本,即使安装了支持加载 PDF 的最新版本,也会使用当前运行的版本。在这种情况下,如果 pdfCapability 属性的值是 HTMLPDFCapability.STATUS_OK,则当 AIR 应用程序尝试加载 PDF 内容时,较旧版本的 Acrobat 或 Reader 会显示警报(并且 AIR 应用程序中不会引发异常)。如果您的最终用户有可能遇到这种情况,则可以考虑向他们提供说明,告知他们在运行应用程序的同时关闭 Acrobat。如果 PDF 内容在可以接受的时间范围内未加载,则您可能希望显示这些说明。 在 Linux 中,AIR 在由用户导出的 PATH(如果其包含 acroread 命令)中和 /opt/Adobe/Reader 目录中查找 Adobe Reader。 以下代码检测用户能否在 AIR 应用程序中显示 PDF 内容。如果用户无法显示 PDF,代码会跟踪对应于 HTMLPDFCapability 错误对象的错误代码: if(HTMLLoader.pdfCapability == HTMLPDFCapability.STATUS_OK) { trace("PDF content can be displayed"); } else { trace("PDF cannot be displayed. Error code:", HTMLLoader.pdfCapability); } 加载 PDF 内容可以通过创建 HTMLLoader 实例、设置其尺寸以及加载 PDF 的路径,将 PDF 添加到 AIR 应用程序。 以下示例从外部站点加载 PDF。将 URLRequest 替换为可用外部 PDF 的路径。 var request:URLRequest = new URLRequest("http://www.example.com/test.pdf"); pdf = new HTMLLoader(); pdf.height = 800; pdf.width = 600; pdf.load(request); container.addChild(pdf); 还可以从文件 URL 和特定于 AIR 的 URL 方案(例如 app 和 app-storage)加载内容。例如,以下代码可加载应用程序目录的 PDFs 子目录中的 test.pdf 文件: app:/js_api_reference.pdf 有关 AIR URL 方案的详细信息,请参阅URI 方案。 编写 PDF 内容的脚本可以像在浏览器的网页中那样,使用 JavaScript 控制 PDF 内容。 针对 Acrobat 的 JavaScript 扩展提供了以下功能(当然还包括其他功能):
有关 Adobe Acrobat 的 JavaScript 扩展的详细信息,请访问 Adobe Acrobat 开发人员联盟:http://www.adobe.com/devnet/acrobat/javascript.html。 HTML-PDF 通信基础知识HTML 页中的 JavaScript 可以通过调用表示 PDF 内容的 DOM 对象的 postMessage() 方法来向 PDF 内容中的 JavaScript 发送消息。例如,请看以下嵌入的 PDF 内容: <object id="PDFObj" data="test.pdf" type="application/pdf" width="100%" height="100%"/> 包含 HTML 内容中的以下 JavaScript 代码向 PDF 文件中的 JavaScript 发送消息: pdfObject = document.getElementById("PDFObj"); pdfObject.postMessage(["testMsg", "hello"]); PDF 文件可以包含 JavaScript 以便接收此消息。在某些上下文(包括文档级、文件夹级、页级、字段级和批级上下文)中,可以向 PDF 文件添加 JavaScript 代码。此处仅讨论文档级上下文,这种上下文在打开 PDF 文档时会对计算出的脚本进行定义。 PDF 文件可以向 hostContainer 对象添加 messageHandler 属性。messageHandler 属性是用于定义处理函数以便响应消息的一种对象。例如,以下代码定义了一个函数,用于处理 PDF 文件从主机容器(嵌入 PDF 文件的 HTML 内容)接收到的消息: this.hostContainer.messageHandler = {onMessage: myOnMessage}; function myOnMessage(aMessage) { if(aMessage[0] == "testMsg") { app.alert("Test message: " + aMessage[1]); } else { app.alert("Error"); } } HTML 页中的 JavaScript 代码可以调用页面中包含的 PDF 对象的 postMessage() 方法。通过调用此方法,可向 PDF 文件中的文档级 JavaScript 发送消息 ("Hello from HTML"): <html> <head> <title>PDF Test</title> <script> function init() { pdfObject = document.getElementById("PDFObj"); try { pdfObject.postMessage(["alert", "Hello from HTML"]); } catch (e) { alert( "Error: \n name = " + e.name + "\n message = " + e.message ); } } </script> </head> <body onload='init()'> <object id="PDFObj" data="test.pdf" type="application/pdf" width="100%" height="100%"/> </body> </html> 有关更高级示例,以及有关使用 Acrobat 8 向 PDF 文件添加 JavaScript 的信息,请参阅在 Adobe AIR 中跨脚本访问 PDF 内容。 通过 ActionScript 编写 PDF 内容的脚本ActionScript 代码(在 SWF 内容中)不能与 PDF 内容中的 JavaScript 直接通信。但是,ActionScript 可与加载 PDF 内容的 HTMLLoader 对象所加载的 HTML 页中的 JavaScript 通信,并且该 JavaScript 代码可与加载的 PDF 文件中的 JavaScript 通信。有关详细信息,请参阅 在 AIR 中进行 HTML 和 JavaScript 编程。 对 AIR 中的 PDF 内容的已知限制Adobe AIR 中的 PDF 内容具有以下限制:
|
|