OS のプリントインターフェイスに対するページの送出処理は Flash Player および AIR によって実行されるので、Flash Player および AIR が担当するタスクの範囲と、OS 自体のプリントインターフェイスが担当するタスクの範囲を理解しておく必要があります。Flash Player および AIR では、プリントジョブの開始、プリンタのページ設定のうち一部の読み込み、プリントジョブのコンテンツの OS への送信、およびユーザーまたはシステムによってプリントジョブがキャンセルされたかどうかの確認が実行されます。その他の処理(プリンタ固有のダイアログボックスの表示、スプールされたプリントジョブのキャンセル、プリンタのステータスに関するレポートなど)は、すべて OS によって実行されます。Flash Player および AIR はプリントジョブの開始や書式指定に関する問題に応答しますが、その際に実行できる処理は、OS のプリント機能インターフェイスから取得した特定のプロパティや条件についてレポートを返すことに限られます。アプリケーション開発者は、レポートされたプロパティや条件に応じて何らかの処理を実行するコードを用意する必要があります。
ユーザーによってプリントジョブがキャンセルされた場合に対応するため、addPage() および send() を呼び出す前に、PrintJob.start() メソッドが true を返したかどうかを確認してください。このメソッドに対する呼び出しを次のように if ステートメントで囲むと、続行する前にキャンセルされたかどうかを簡単にチェックできます。
if (myPrintJob.start())
{
// addPage() and send() statements here
}
PrintJob.start() の戻り値が true の場合は、ユーザーが「印刷」を選択した(または Flash Player か AIR が print コマンドを開始した)ことを意味するので、addPage() および send() メソッドを呼び出すことができます。
また、プリント処理の管理をしやすくするために、Flash Player および AIR から PrintJob.addPage() メソッドの例外が送出されます。これらのエラーをキャッチすることにより、ユーザーに情報と対処方法についての選択肢を示すことができます。PrintJob.addPage() メソッドが失敗した場合は、別の関数を呼び出すか、現在のプリントジョブを停止する方法もあります。このような例外をキャッチするには、addPage() の呼び出しを次のように try..catch ステートメントに組み込みます。次に示す例の [params] の部分には、実際にプリントするコンテンツを指定するパラメータを指定します。
if (myPrintJob.start())
{
try
{
myPrintJob.addPage([params]);
}
catch (error:Error)
{
// Handle error,
}
myPrintJob.send();
}
プリントジョブを開始した後でも、PrintJob.addPage() を使用してコンテンツを追加し、それによって例外(ユーザーによるプリントジョブのキャンセルなど)が発生するかどうかを確認することが可能です。例外が発生した場合は、情報と対処方法の選択肢をユーザー(または Flash Player か AIR)に示したり、現在のプリントジョブを停止したりするロジックを catch ステートメントに追加できます。ページを正常に追加できた場合は、PrintJob.send() を使用してページをプリンタに送信する処理に進みます。
Flash Player または AIR がプリントジョブをプリンタに送信する際に問題が発生した場合(プリンタがオフラインになっていた場合など)も、同様にその例外をキャッチし、情報と対処方法の選択肢をユーザー(または Flash Player か AIR)に示すことができます(メッセージテキストと警告を 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 Player や AIR の制御下にあるプロパティではありません。したがって設定を変更することはできませんが、これらの情報を使用することで、コンテンツをプリンタの設定に適した形式に整形してプリンタに送信できます。詳細については、サイズ、拡大率、用紙の向きの設定を参照してください。
プリントジョブで各ページをベクターグラフィックとしてスプールするか、ビットマップイメージとしてスプールするかは、手動で設定できます。場合によっては、ベクター形式でプリントするとスプールファイルが小さくなり、画質もビットマップ形式でプリントするより向上することがあります。ただし、コンテンツにビットマップイメージが含まれている場合、アルファ透明度やカラー効果を再現するには、ページをビットマップイメージとしてプリントする必要があります。また、PostScript 非対応のプリンタでは、ベクターグラフィックは自動的にビットマップイメージに変換されます。ビットマップ形式でのプリントを指定するには、次のように、printAsBitmap パラメータに true を設定した PrintJobOptions オブジェクトを PrintJob.addPage() の第 3 パラメータとして渡します。
var options:PrintJobOptions = new PrintJobOptions(); options.printAsBitmap = true; myPrintJob.addPage(mySprite, null, options);
第 3 パラメータの値を指定しない場合、そのプリントジョブではベクター形式でのプリントがデフォルトで実行されます。
ActionScript 3.0 では、ActionScript の以前のバージョンと同様に、PrintJob オブジェクトが単一フレームに制限されません。ただし、印刷ダイアログボックスで「OK」ボタンをクリックすると印刷ステータス情報が表示されるので、できるだけ早く PrintJob.addPage() および PrintJob.send() を呼び出して、ページをスプーラに送信する必要があります。PrintJob.send() 呼び出しを含むフレームの到達が遅れると、印刷処理が遅延します。
ActionScript 3.0 では、スクリプトのタイムアウト制限は 15 秒です。したがって、プリントジョブのシーケンスにおける主要なステートメント間の時間が 15 秒を超えてはいけません。つまり、15 秒間のスクリプトタイムアウトの制限は、次の間隔に適用されます。
これらの間隔のいずれかが 15 秒を超えていると、その次の PrintJob インスタンスの PrintJob.start() の呼び出しで false が返され、その次の PrintJob インスタンスの PrintJob.addPage() によって、Flash Player または AIR がランタイム例外をスローします。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート