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 コンテンツの読み込みAIR アプリケーションに PDF を追加するには、HTMLLoader インスタンスを作成し、そのサイズを設定して、PDF のパスを読み込みます。 次の例では、外部サイトから 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); また、file URL スキームや AIR 固有の URL スキーム(app や app-storage など)からコンテンツを読み込むこともできます。例えば、次のコードでは、アプリケーションディレクトリの PDFs サブディレクトリにある test.pdf を読み込んでいます。 app:/js_api_reference.pdf AIR URL スキームについて詳しくは、URI スキームを参照してください。 PDF コンテンツのスクリプト作成ブラウザー内の Web ページと同様に、JavaScript を使用して 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 を含めることができます。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 コンテンツのスクリプト作成SWF コンテンツ内の ActionScript コードでは、PDF コンテンツ内の JavaScript と直接通信することができません。ただし、ActionScript では、PDF コンテンツを読み込む HTMLLoader オブジェクトに読み込まれた HTML ページ内の JavaScript と通信できます。さらに、その JavaScript コードでは、読み込まれた PDF ファイル内の JavaScript と通信できます。詳しくは、AIR での HTML および JavaScript のプログラミングを参照してください。 AIR 内の PDF コンテンツに関する既知の制限Adobe AIR 内の PDF コンテンツには、次のような制限があります。
|
|