サイズ、拡大率、用紙の向きの設定

Flash Player 9 以降、Adobe AIR 1.0 以降

ページのプリント の節で詳しく説明している基本的なプリントジョブの実行手順では、指定したスプライトの画面サイズおよび位置を直接反映した同等のプリントが出力されます。しかし、プリンターの解像度は環境によって異なり、また、プリンターの設定によってスプライトのプリント結果に悪影響が出る場合もあります。

Flash ランタイムはオペレーティングシステムの印刷設定を読み取ることができますが、これらのプロパティは読み取り専用です。値に応答できても、設定はできません。したがって、プリンターの用紙サイズ設定を調べた後は、そのサイズに合わせてコンテンツを調整できます。また、プリンターの余白や用紙の向きに関する設定を調べることもできます。プリンターの設定に合わせるには、プリント範囲の指定、画面解像度とプリンターのポイント尺度との違いに関する調整、用紙のサイズと向きに応じた変換などを行います。

矩形によるプリント範囲の指定

PrintJob.addPage() メソッドでは、プリントするスプライトの範囲を指定できます。それには、第 2 パラメーターの printArea として Rectangle オブジェクトを指定します。このパラメーターの値については、次の 3 つの指定方法があります。

  • 特定のプロパティを持つ Rectangle オブジェクトを作成し、それを次のように addPage() の呼び出しで使用します。

    private var rect1:Rectangle = new Rectangle(0, 0, 400, 200); 
    myPrintJob.addPage(sheet, rect1);
  • Rectangle オブジェクトを前もって指定しない場合は、次のように、呼び出し時に直接指定できます。

    myPrintJob.addPage(sheet, new Rectangle(0, 0, 100, 100));
  • addPage() 呼び出しの第 3 パラメーターを指定する必要がある場合に、プリント範囲の矩形を指定しないようにするには、次のように、第 2 パラメーターとして null を使用します。

    myPrintJob.addPage(sheet, null, options);

ポイントとピクセルの比較

矩形の幅と高さはピクセル値です。 一方、プリンターで使用する測定単位はポイントです。 ポイントの物理サイズは固定(1/72 インチ)ですが、画面上のピクセルのサイズは解像度によって異なります。 したがって、ピクセル値とポイント値の変換比率は、プリンターの設定と、スプライトが拡大または縮小されているかどうかによって変化します。 72 ピクセル幅の伸縮されていない Sprite は、用紙上では 1 インチ幅で印刷されます。1 ポイントは 1 ピクセルに相当し、画面の解像度とは無関係です。

インチおよびセンチメートルと、ポイントおよび twip(1/20 ポイント)との間には、次の等式が成り立ちます。

  • 1 ポイント = 1/72 インチ = 20 twip

  • 1 インチ = 72 ポイント = 1440 twip

  • 1 センチメートル = 567 twip

printArea パラメーターを省略するか、このパラメーターの指定が正しくない場合は、スプライト全体がプリントされます。

拡大/縮小

印刷前に Sprite オブジェクトを拡大/縮小するには、 PrintJob.addPage() メソッドを呼び出す前に拡大/縮小のプロパティ( サイズの変更とオブジェクトの拡大/縮小 を参照)を設定します。印刷後、これらのプロパティを元の値に戻します。Sprite オブジェクトの拡大/縮小は、 printArea プロパティとは無関係です。つまり、50×50 ピクセルのプリント範囲を指定した場合は常に 2500 個のピクセルがプリントされます。 Sprite オブジェクトを拡大または縮小している場合、その設定を反映してプリント結果は伸縮しますが、プリントの対象となる 2500 個のピクセルは変わりません。

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

横長 / 縦長方向のプリント

Flash Player または AIR では用紙の向きの設定を検出できるため、次の例に示すように、プリンター設定に応じてコンテンツのサイズや向きを調整するロジックを ActionScript に組み込むことができます。

if (myPrintJob.orientation == PrintJobOrientation.LANDSCAPE) 
{ 
    mySprite.rotation = 90; 
}
注意: 用紙の向きについてシステム設定を読み込む場合は、 PrintJobOrientation クラス を読み込んでください。PrintJobOrientation クラスには、用紙の向きを表す定数値が定義されています。 クラスを読み込むには次のステートメントを使用します。
import flash.printing.PrintJobOrientation;

ページの幅と高さへの対応

用紙の向きに関する設定情報を扱う場合と同様に、 if ステートメントで囲んだロジックを埋め込むと、ページの幅と高さの設定を読み取って、それに応じた処理ができます。その例を次のコードに示します。

if (mySprite.height > myPrintJob.pageHeight) 
{ 
    mySprite.scaleY = .75; 
}

また、余白の設定を調べるには、次のように用紙の寸法とページの寸法を比較します。

margin_height = (myPrintJob.paperHeight - myPrintJob.pageHeight) / 2; 
margin_width = (myPrintJob.paperWidth - myPrintJob.pageWidth) / 2;