Flash ランタイムのタスクとシステムプリント

Flash Player 9 以降、Adobe AIR 1.0 以降

Flash ランタイムでは、ページが OS のプリントインターフェイスに送出されるので、Flash ランタイムが管理するタスクと、OS 自体のプリントインターフェイスが管理するタスクについて注意する必要があります。Flash ランタイムでは、プリントジョブの開始、プリンターのページ設定の読み込み、OS に対するプリントジョブのコンテンツの送信、およびユーザーまたはシステムによってプリントジョブがキャンセルされたかどうかの確認を実行します。その他の処理(プリンター固有のダイアログボックスの表示、スプールされたプリントジョブのキャンセル、プリンターのステータスに関するレポートなど)は、すべて OS で実行されます。Flash ランタイムはプリントジョブの開始や書式指定に問題がある場合に応答できますが、OS のプリントインターフェイスから取得した特定のプロパティや状態についてのみレポートを返すことができます。アプリケーション開発者は、レポートされたプロパティや状態に応じて何らかの処理を実行するコードを用意する必要があります。

例外および戻り値に対する処理

ユーザーがプリントジョブをキャンセルした場合に対応するため、 addPage() および send() の呼び出しを実行する前に、 PrintJob.start() メソッドが true を返したかどうかを確認してください。これらのメソッドに対する呼び出しを次のように if ステートメントで囲むと、続行する前にキャンセルされたかどうかを簡単にチェックできます。

if (myPrintJob.start()) 
{ 
    // addPage() and send() statements here 
}

PrintJob.start() true の場合は、ユーザーが「印刷」を選択(または Flash Player または AIR などの Flash ランタイムが Print コマンドを開始)しています。したがって、 addPage() および send() メソッドを呼び出すことができます。

また、プリント処理を管理しやすくするために、 PrintJob.addPage() メソッドに対して Flash ランタイムから例外が送出されます。これらのエラーをキャッチすることにより、ユーザーに情報と対処方法の選択肢を示すことができます。 PrintJob.addPage() メソッドが失敗した場合は、別の関数を呼び出すか、現在のプリントジョブを停止する方法もあります。これらの例外は、 addPage() の呼び出しを try..catch ステートメント内に埋め込むことによってキャッチできます。この例では、 [params] はパラメーターのプレースホルダーで、実際にプリントする内容を指定します。

if (myPrintJob.start()) 
{ 
    try 
    { 
        myPrintJob.addPage([params]); 
    } 
    catch (error:Error) 
    { 
        // Handle error,  
    } 
    myPrintJob.send(); 
}

プリントジョブを開始した後は、 PrintJob.addPage() を使用してコンテンツを追加し、それによって例外(ユーザーがプリントジョブをキャンセルした場合など)が発生するかどうかを確認できます。例外が発生した場合は、 catch ステートメントにロジックを追加して、ユーザー(または Flash ランタイム)に情報と対処方法の選択肢を示すか、現在のプリントジョブを停止できます。ページを正常に追加できた場合は、次に PrintJob.send() でページをプリンターに送信します。

Flash ランタイムがプリントジョブをプリンターに送信する際に問題が発生した場合(プリンターがオフラインになっていた場合など)も、同様にその例外をキャッチし、情報と対処方法の選択肢を示すことができます(メッセージテキストと警告をアニメーションで表示することなどが考えられます)。例えば、次のコードに示すように、テキストフィールドに if..else ステートメントで新しいテキストを割り当てることができます。

if (myPrintJob.start()) 
{ 
    try 
    { 
        myPrintJob.addPage([params]); 
    } 
    catch (error:Error) 
    { 
        // Handle error.  
    } 
    myPrintJob.send(); 
} 
else 
{ 
    myAlert.text = "Print job canceled"; 
}

実際に動作するサンプルについては、 プリントの例:拡大/縮小、トリミング、および応答 を参照してください。

ページプロパティの操作

ユーザーが印刷ダイアログボックスで「OK」をクリックし、 PrintJob.start() true を返すと、プリンターの設定で定義されているプロパティにアクセスできます。この設定には、用紙の幅と高さ( pageHeight pageWidth )および用紙の向きが含まれます。これらはプリンターの設定であり、Flash ランタイムの制御下にあるプロパティではありません。したがって、設定を変更することはできませんが、これらの情報を使用することで、コンテンツを現在の設定に適した形式に整形してプリンターに送信できます。詳しくは、 サイズ、拡大率、用紙の向きの設定 を参照してください。

ベクター形式またはビットマップ形式のレンダリング

プリントジョブで各ページをベクターグラフィックとしてスプールするか、ビットマップイメージとしてスプールするかは、手動で設定できます。 場合によっては、ベクター形式でプリントするとスプールファイルが小さくなり、画質もビットマップ形式でプリントするより向上することがあります。ただし、コンテンツにビットマップイメージが含まれている場合、アルファ透明度やカラー効果を再現するには、ページをビットマップイメージとしてプリントします。また、PostScript 非対応のプリンターでは、ベクターグラフィックは自動的にビットマップイメージに変換されます。

ビットマップ形式でのプリントを指定するには、PrintJobOptions オブジェクトを PrintJob.addPage() の第 3 パラメーターとして渡します。

Flash Player および AIR 2 よりも前の AIR では、PrintJobOptions オブジェクトの printAsBitmap パラメーターを true に設定します。以下に例を示します。

var options:PrintJobOptions = new PrintJobOptions(); 
options.printAsBitmap = true; 
myPrintJob.addPage(mySprite, null, options);

第 3 パラメーターの値を指定しない場合、そのプリントジョブではデフォルトのベクター形式のプリントが実行されます。

AIR 2 以降では、PrintJobOptions オブジェクトの printMethod プロパティを使用して、プリント方法を指定します。このプロパティには、PrintMethod クラス内の定数として定義された、次の 3 つの値を指定できます。

  • PrintMethod.AUTO :プリントするコンテンツに基づいて、最適なプリント方法を自動的に選択します。例えば、ページにテキストが含まれている場合は、ベクター形式のプリント方法が選択されます。ただし、アルファ透明度を使用した透かしイメージがテキスト上に重なって表示されている場合は、透明度を維持するためにビットマップ形式のプリントが選択されます。

  • PrintMethod.BITMAP :コンテンツに関わらず、ビットマップ形式のプリントが強制されます。

  • PrintMethod.VECTOR :コンテンツに関わらず、ベクター形式のプリントが強制されます。

プリントジョブステートメントのタイミング

ActionScript 3.0 では、ActionScript の以前のバージョンと同様に、PrintJob オブジェクトが単一フレームに制限されません。 ただし、印刷ダイアログボックスで「OK」ボタンをクリックすると印刷ステータス情報が表示されるので、ページをスプーラに送信した直後に PrintJob.addPage() PrintJob.send() を呼び出してください。 PrintJob.send() 呼び出しの格納されたフレームに遅延が到達すると、印刷処理が遅延します。

ActionScript 3.0 には、15 秒間のスクリプトタイムアウトの制限があります。 したがって、プリントジョブのシーケンスにおける主要なステートメント間の時間が 15 秒を超えてはなりません。 つまり、15 秒間のスクリプトタイムアウトの制限は、次の間隔に適用されます。

  • PrintJob.start() と最初の PrintJob.addPage()

  • PrintJob.addPage() と次の PrintJob.addPage()

  • 最後の PrintJob.addPage() PrintJob.send()

上記の間隔のいずれかが 15 秒以上の場合、次に PrintJob インスタンスの PrintJob.start() を呼び出したときに false が返されます。また、次に PrintJob インスタンスの PrintJob.addPage() を呼び出したときに、Flash Player または AIR からランタイム例外がスローされます。