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 クラスの次のいずれかの定数に設定されます。

定数

説明

HTMLPDFCapability.STATUS_OK

適切なバージョン(8.1 以降)の Adobe Reader が検出されたため、PDF コンテンツを HTMLLoader オブジェクトに読み込むことができます。

HTMLPDFCapability.ERROR_INSTALLED_READER_NOT_FOUND

Adobe Reader が検出されませんでした。HTMLLoader オブジェクトは PDF コンテンツを表示できません。

HTMLPDFCapability.ERROR_INSTALLED_READER_TOO_OLD

Adobe Reader が検出されましたが、バージョンが古すぎます。HTMLLoader オブジェクトは PDF コンテンツを表示できません。

HTMLPDFCapability.ERROR_PREFERRED_READER_TOO_OLD

適切なバージョン(8.1 以降)の Adobe Reader が検出されましたが、8.1 より前のバージョンの Adobe Reader で PDF コンテンツを処理するように設定されています。HTMLLoader オブジェクトは PDF コンテンツを表示できません。

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(air.HTMLLoader.pdfCapability == air.HTMLPDFCapability.STATUS_OK)  
{ 
    air.trace("PDF content can be displayed"); 
} 
else  
{ 
    air.trace("PDF cannot be displayed. Error code:", HTMLLoader.pdfCapability); 
}

PDF コンテンツの読み込み

AIR アプリケーションに PDF を追加するには、HTMLLoader インスタンスを作成し、そのサイズを設定して、PDF のパスを読み込みます。

AIR アプリケーションでは、ブラウザーと同様の方法で PDF を追加できます。例えば、ウィンドウの最上位の HTML、オブジェクトタグ、フレームまたは iframe に PDF を読み込むことができます。

次の例では、外部サイトから PDF を読み込んでいます。iframe の src プロパティを値を使用可能な外部 PDF へのパスに置き換えます。

<html> 
    <body> 
        <h1>PDF test</h1> 
        <iframe id="pdfFrame"  
            width="100%"  
            height="100%"  
            src="http://www.example.com/test.pdf"/> 
    </body> 
</html>

また、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 コンテンツのクロススクリプト 」を参照してください。

AIR 内の PDF コンテンツに関する既知の制限

Adobe AIR 内の PDF コンテンツには、次のような制限があります。

  • PDF コンテンツは、透明な( transparent プロパティが true に設定されている)ウィンドウ(NativeWindow オブジェクト)には表示されません。

  • PDF ファイルの表示順序は、AIR アプリケーションの他の表示オブジェクトの表示順序とは動作が異なります。PDF コンテンツは、HTML の表示順序に従って適切に配置されますが、AIR アプリケーションの表示順序では常にコンテンツの最上部に配置されます。

  • PDF ドキュメントを含む HTMLLoader オブジェクトの特定のビジュアルプロパティが変更されると、PDF ドキュメントは表示されなくなります。このようなプロパティには、 filters alpha rotation および scaling があります。これらのプロパティを変更すると、プロパティがリセットされるまで PDF コンテンツは表示されません。HTMLLoader オブジェクトを含む表示オブジェクトコンテナで同じプロパティを変更した場合も PDF コンテンツは表示されません。

  • PDF コンテンツが表示されるのは、PDF コンテンツを含む NativeWindow オブジェクトの Stage オブジェクトの scaleMode プロパティ( window.nativeWindow.stage プロパティ)が air.StageScaleMode.NO_SCALE に設定されている場合のみです。他の値に設定されている場合、PDF コンテンツは表示されません。

  • PDF ファイル内のコンテンツへのリンクをクリックすると、PDF コンテンツのスクロール位置が更新されます。PDF ファイルの外部にあるコンテンツへのリンクをクリックすると、(リンクのターゲットが新規ウィンドウである場合でも)PDF ファイルを含む HTMLLoader オブジェクトがリダイレクトされます。

  • PDF コメントワークフローは、AIR では機能しません。