AIRが持つPDF表示機能

前回は、AIRが持つHTMLレンダリングエンジンについて解説した。今回はそれに関連したトピックとして、AIRが持つPDFとの連携機能について説明を行いたい。

PDFとの連携は、AIRのβ版から導入された機能だ。利用するためには、ローカルマシン上にAdobe Reader 8.1以上がインストールされている必要がある。この機能を使うと、AIRアプリケーション内でPDFファイルを表示し、画面上に配置することができる。以下は、PDFファイルを横二つに並べて表示してみたものだ。

AIRアプリケーション内でPDFを表示

表示する方法は簡単で、前回説明したHTMLコンポーネント(mx.controls.HTML)やflash.html.HTMLControlで、PDFファイルのURLを読み込むだけだ。(「http://」で始まるURLだけではなく、さまざまなURLが利用可能だ。指定できるURLの書式については、こちらの記事を見ていただきたい。)

HTMLコンポーネントで読み込む場合。location属性にPDFのURLを指定

<mx:HTML width="640" height="480" location="http://labs.adobe.com/showcase/special/airderby/airderby_officialrules.pdf"/>

HTMLControlで読み込む場合。loadメソッドの引数が、PDFのURLを指定したURLRequestとなる

// HTMLControlを生成し、幅と高さを設定
var htmlControl:HTMLControl = new HTMLControl();
htmlControl.height = 480;
htmlControl.width = 640;

// PDFファイルをロード
htmlControl.load(new URLRequest("http://labs.adobe.com/showcase/special/airderby/airderby_officialrules.pdf"));

// UIComponentでラップし、コンポーネントとして利用可能にする
var comp:UIComponent = new UIComponent();
comp.addChild(hc);

// 他のコンポーネントに追加
disp.addChild(pdf);

HTMLControlクラスの、addEventListenerを用いたイベントハンドリングも行うことができる。

addEventListenerでイベントハンドリング

htmlControl.addEventListener(Event.DOM_INITIALIZE, function():void {
    trace("PDF読み込み開始");
});

htmlControl.addEventListener(Event.COMPLETE, function():void {
    trace("PDFの読み込み完了");
});

PDF機能の利用可否を調べる

前述したように、PDF機能を用いるためにはAdobe Reader 8.1以上がインストールされている必要がある。適切なバージョンのReaderがインストールされ、利用可能でない場合は、PDFの読み込みを行った時点でエラーが発生するので、プログラム内で何らかの対処が必要となる。

その際に用いるのはHTMLControl.pdfCapabilityプロパティだ。同プロパティの値を、flash.html.HTMLPDFCapabilityクラスの定数と比較することで、AIRアプリケーションを実行中のマシンがReaderに関してどういった状態かを調べることができる。

エラー処理を行うための典型的なコードは以下のようになる。

エラー処理を行うためのコード

switch(HTMLControl.pdfCapability) {
    case HTMLPDFCapability.STATUS_OK:
        // PDF機能が利用可能
        break;
    case HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND:
        // Readerがインストールされていない
        break;
    case HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD:
        // Readerのバージョンが8.1よりも古い
        break;
    case HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD:
        // 8.1はインストール済みだが、それよりも古いReaderを使うよう設定されている
        break;
    case HTMLPDFCapability.ERROR_CANNOT_LOAD_READER:
        // 8.1はインストール済みだが、なんらかの理由で利用できない
        break;
}

プログラム内でこうした条件分岐を行い、PDF機能が利用できない場合には適切なエラー処理を施す必要がある。

β版における制限

なお、現在のβ版においては、以下のような制限がある。

  • PDFを表示中のHTMLコンポーネントは、常に表示の重なり順が一番上に来てしまう。
  • フィルタ、透明度、回転、スケールなどを変更できない。変更すると、それらの値がリセットされるまでPDF自体が表示されなくなる。
  • PDF内のリンクが上手く動作しない。

活用法はさまざま

今回は、AIRが持つPDF表示機能を紹介した。サーバサイドでPDFを動的に生成し、ダウンロードして表示したり、アプリケーションのマニュアルを必要に応じてダウンロードして表示する、などの利用法が考えられるだろう。

次回は、AIRにおけるドラッグ&ドロップについて解説したい。