在 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。請以可用之外部 PDF 的路徑取代 URLRequest。 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 內容,就像在瀏覽器的網頁中控制 PDF 內容一樣。 適用於 Acrobat 的 JavaScript 擴充功能可以提供許多功能,包括:
如需有關適用於 Adobe Acrobat 之 JavaScript 擴充功能的詳細資訊,請造訪 Adobe Acrobat Developer Connection,網址為: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 以便接收這個訊息。在某些內容 (其中包括文件、資料夾、網頁、欄位和批次層級) 中,您可以將 JavaScript 程式碼加入至 PDF 檔。在此僅會針對文件層級內容來討論,這個層級的內容會定義當開啟 PDF 文件時,所評估的預設指令碼。 PDF 檔可以將 messageHandler 屬性加入至 hostContainer 物件。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() 方法。呼叫這個方法時,便會將訊息 ("Hello from HTML") 傳送給 PDF 檔中的文件層級 JavaScript。 <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 進行通訊。不過,對於載入 PDF 內容之 HTMLLoader 物件中載入的 HTML 網頁,ActionScript 可以與網頁中的 JavaScript 進行通訊,而且該 JavaScript 程式碼可以與所載入 PDF 檔中的 JavaScript 進行通訊。如需詳細資訊,請參閱:在 AIR 中撰寫 HTML 和 JavaScript 程式。 AIR 中 PDF 內容的已知限制Adobe AIR 中的 PDF 內容具有下列限制:
|
|