パッケージflash.printing
public class PrintJob
継承PrintJob Inheritance EventDispatcher Inheritance Object

PrintJob クラスを使用すると、コンテンツを作成して 1 ページまたは複数のページに印刷できます。このクラスを使用すると、可視状態のコンテンツをダイナミックまたは画面外でレンダリングし、単一の [印刷] ダイアログボックスを使用して、コンテンツの縦横比を保持しつつ伸縮せずにドキュメントを印刷できます。この機能は、データベースコンテンツやダイナミックテキストなどダイナミックコンテンツをレンダリングおよび印刷するときに特に便利です。

印刷ジョブを作成し始めるには、コンストラクタ PrintJob() を使用します。

さらに、PrintJob.start() によって得られるプロパティを使用すると、ドキュメントからユーザーのプリンタ設定 (用紙の高さ、幅、イメージの方向など) にアクセスすることができ、プリンタの設定に合わせて Flash のコンテンツを動的にフォーマットするようにドキュメントを構成することができます。PrintJob.start() によって格納されるこれらのレイアウトプロパティは読み取り専用で、Flash Player で変更できません。

メモ : ActionScript 3.0 では、ActionScript の以前のバージョンと同様に、PrintJob オブジェクトが単一フレームに制限されません。ただし、[印刷] ダイアログボックスで [OK] ボタンをクリックすると印刷ステータス情報が表示されるため、ページをスプーラに送信したらただちに PrintJob.addPage() および PrintJob.send() を呼び出す必要があります。PrintJob.send() 呼び出しの格納されたフレームに遅延が到達すると、印刷処理が遅延します。

また、次の間隔には、15 秒のスクリプトのタイムアウト制限が適用されます。

上記の間隔が 15 秒以上である場合、PrintJob インスタンスの次回の PrintJob.start() を呼び出すと false が返されます。PrintJob インスタンスの次回の PrintJob.addPage() によって、Flash Player はランタイム例外をスローします。

例の表示

関連項目

ActionScript 3.0 における PrintJob クラスの新機能


パブリックプロパティ
 プロパティ定義
 Inheritedconstructor : Object
特定のオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
  orientation : String
[read-only] 印刷するイメージの向き。
PrintJob
  pageHeight : int
[read-only] ページ上で実際に印刷可能な領域の高さ (ポイント単位)
PrintJob
  pageWidth : int
[read-only] ページ上で実際に印刷可能な領域の幅 (ポイント単位)。
PrintJob
  paperHeight : int
[read-only] 用紙全体の高さ (ポイント単位)
PrintJob
  paperWidth : int
[read-only] 用紙全体の幅 (ポイント単位)
PrintJob
 Inheritedprototype : Object
[static] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
Object
パブリックメソッド
 メソッド定義
  PrintJob()
ページを印刷できる PrintJob オブジェクトを作成します。
PrintJob
 InheritedaddEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
イベントリスナーオブジェクトを EventDispatcher オブジェクトに登録し、リスナーがイベントの通知を受け取るようにします。
EventDispatcher
  addPage(sprite:Sprite, printArea:Rectangle = null, options:PrintJobOptions = null, frameNum:int = 0):void
指定の Sprite オブジェクトを 1 ページとして印刷スプーラに送ります。
PrintJob
 InheriteddispatchEvent(event:Event):Boolean
イベントをイベントフローに送出します。
EventDispatcher
 InheritedhasEventListener(type:String):Boolean
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。
EventDispatcher
 InheritedhasOwnProperty(name:String):Boolean
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
 InheritedisPrototypeOf(theClass:Object):Boolean
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
 InheritedpropertyIsEnumerable(name:String):Boolean
指定されたプロパティが存在し、列挙可能かどうかを示します。
Object
 InheritedremoveEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher オブジェクトからリスナーを削除します。
EventDispatcher
  send():void
PrintJob.start()PrintJob.addPage() が成功した後、スプールしたページをプリンタに送信します。
PrintJob
 InheritedsetPropertyIsEnumerable(name:String, isEnum:Boolean = true):void
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
  start():Boolean
オペレーティングシステムの [印刷] ダイアログボックスを表示し、スプールを開始し、PrintJob の読み取り専用プロパティ値を設定します。
PrintJob
 InheritedtoString():String
指定されたオブジェクトのストリング表現を返します。
Object
 InheritedvalueOf():Object
指定されたオブジェクトのプリミティブ値を返します。
Object
 InheritedwillTrigger(type:String):Boolean
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。
EventDispatcher
プロパティの詳細
orientationプロパティ
orientation:String  [read-only]

印刷するイメージの向き。このプロパティは PrintJobOrientation クラスからの値です。このプロパティは、PrintJob.start() メソッドの呼び出し後にのみ使用可能になります。

実装
    public function get orientation():String

関連項目

pageHeightプロパティ 
pageHeight:int  [read-only]

ページ上で実際に印刷可能な領域の高さ (ポイント単位)ユーザーが設定した余白は含みません。このプロパティは、PrintJob.start() メソッドの呼び出し後にのみ使用可能になります。

実装
    public function get pageHeight():int

関連項目

pageWidthプロパティ 
pageWidth:int  [read-only]

ページ上で実際に印刷可能な領域の幅 (ポイント単位)。ユーザーが設定した余白は含みません。このプロパティは、PrintJob.start() メソッドの呼び出し後にのみ使用可能になります。

実装
    public function get pageWidth():int

関連項目

paperHeightプロパティ 
paperHeight:int  [read-only]

用紙全体の高さ (ポイント単位)このプロパティは、PrintJob.start() メソッドの呼び出し後にのみ使用可能になります。

実装
    public function get paperHeight():int
paperWidthプロパティ 
paperWidth:int  [read-only]

用紙全体の幅 (ポイント単位)このプロパティは、PrintJob.start() メソッドの呼び出し後にのみ使用可能になります。

実装
    public function get paperWidth():int
コンストラクタの詳細
PrintJob()コンストラクタ
public 関数 PrintJob()

ページを印刷できる PrintJob オブジェクトを作成します。PrintJob オブジェクトを作成したら、PrintJob.start()PrintJob.addPage()PrintJob.send() の順にメソッドを使用して、プリンタに印刷ジョブを送信します。

たとえば次のコードに示される my_pj.addPage() メソッド呼び出しの [params] プレースホルダーテキストをカスタムパラメータと置き換えできます。

 // create PrintJob object
 var my_pj:PrintJob = new PrintJob();
  
 // display Print dialog box, but only initiate the print job
 // if start returns successfully.
 if (my_pj.start()) {
  
    // add specified page to print job
    // repeat once for each page to be printed
    try {
      my_pj.addPage([params]);
    }
    catch(e:Error) {
      // handle error 
    }
    try {
      my_pj.addPage([params]);
    }
    catch(e:Error) {
     // handle error 
    }
 
    // send pages from the spooler to the printer, but only if one or more
    // calls to addPage() was successful. You should always check for successful 
    // calls to start() and addPage() before calling send().
    my_pj.send();
 }
 

最初の PrintJob オブジェクトがアクティブである間は、2 つ目の PrintJob オブジェクトを作成できません。1 つ目の PrintJob オブジェクトがアクティブであるときに new PrintJob() を呼び出して 2 つ目の PrintJob オブジェクトを作成しようとしても、2 つ目の PrintJob オブジェクトは生成されません。そのため 2 つ目の PrintJob を作成する前に my_pj 値を確認することができます。


スロー
IllegalOperationError — 別の PrintJob オブジェクトがアクティブなままである場合は、例外をスローします。

関連項目

メソッドの詳細
addPage()メソッド
public function addPage(sprite:Sprite, printArea:Rectangle = null, options:PrintJobOptions = null, frameNum:int = 0):void

指定の Sprite オブジェクトを 1 ページとして印刷スプーラに送ります。このメソッドを使用する前に、PrintJob オブジェクトを作成し、PrintJob.start() を使用する必要があります。次に、印刷ジョブに対して PrintJob.addPage() を 1 回または複数回呼び出した後、 PrintJob.send() を使用して、スプールしたページをプリンタに送信します。つまり、PrintJob オブジェクトを作成したら、PrintJob.start() PrintJob.addPage()PrintJob.send() の順にメソッドを使用して、プリンタに印刷ジョブを送信します。PrintJob.start() を 1 回呼び出した後で PrintJob.addPage() を複数回使用することにより、複数のページを 1 回で印刷できます。

PrintJob.addPage() によって Flash Player が例外をスローした場合 (PrintJob.start() を呼び出していない場合や、ユーザーが印刷ジョブをキャンセルした場合など) は、その後で PrintJob.addPage() を呼び出すと失敗します。ただし、それまでに PrintJob.addPage() の呼び出しが成功していれば、最後に PrintJob.send() コマンドを実行することで、スプールに成功したすべてのページがプリンタに送られます。

印刷ジョブで PrintJob.addPage() 操作の完了に 15 秒以上かかる場合、Flash Player は、次回の Print.addPage() の呼び出しに例外をスローします。

printArea パラメータの値を渡すと、printArea オブジェクトの x 座標と y 座標がページの印刷可能領域の左上隅 (0,0 座標) に対応します。印刷可能領域は、PrintJob.start() で設定した読み取り専用の pageHeight プロパティと pageWidth プロパティで表されます。印刷結果はページ上の印刷可能領域の左上隅を基準に整列されるので、printArea で定義した領域が用紙上の印刷可能領域よりも大きい場合は、printArea で定義した領域の右側または下側の部分 (またはその両方) は切り取られることがあります。printArea の値を指定しない場合にステージが印刷可能領域より大きいときも、同様の切り取りが発生します。printArea の値を指定しない場合にスクリーンが印刷可能領域より大きいときも、同様の切り取りが発生します。

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

Flash Player の印刷機能は、PostScript プリンタと非 PostScript プリンタをサポートしています。非 PostScript プリンタでは、ベクターはビットマップに変換されます。

パラメータ
sprite:Sprite — 印刷する Sprite のインスタンス名。
 
printArea:Rectangle (default = null) — 印刷する領域を指定する Rectangle オブジェクト。

矩形の幅と高さはピクセル値です。プリンタでは、印刷用の測定単位としてポイントを使用します。ポイントは物理的な固定サイズ (1/72 インチ) ですが、画面用のピクセル深度のサイズは画面の解像度によって異なります。そのためピクセルとポイントの間の変換レートは、プリンタの設定、および Sprite が伸縮されているかどうかによって決まります。72 ピクセル幅の伸縮されていないスプライトは、用紙上には 1 インチ幅でプリントされます。画面の解像度とは関係なく、1 ポイントが 1 ピクセルに対応します。

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

  • 1 point = 1/72 inch = 20 twips
  • 1 inch = 72 points = 1440 twips
  • 1 cm = 567 twips

printArea パラメータを省略した場合、または間違った値を指定した場合は、sprite の全ステージ領域が印刷されます。

printArea の値を指定せずに、options または frameNum の値を指定するには、printAreanull を指定します。

 
options:PrintJobOptions (default = null) — ベクターとビットマップのどちらで印刷するかを指定する、オプションのパラメータ。デフォルト値は null で、これはベクター形式を示します。sprite をビットマップとして印刷するには、PrintJobOptions オブジェクトの printAsBitmap プロパティを true に設定します。printAsBitmaptrue に設定するかどうかを決めるときには、次の項目に留意してください。
  • 印刷するコンテンツにビットマップイメージが含まれる場合は、アルファ透明効果とカラー効果を含めるために printAsBitmaptrue に設定します。
  • コンテンツにビットマップイメージが含まれない場合は、このパラメータを省略するかして、より品質の高いベクター形式で印刷します。

options を省略した場合、または間違った値を渡した場合は、ベクター形式が使用されます。options の値を指定せずに、frameNumber の値を指定するには、optionsnull を指定します。

 
frameNum:int (default = 0)印刷するフレームを指定できるオプションの数値。frameNum を渡しても、そのフレームの ActionScript は呼び出されません。このパラメータを省略すると、sprite 内の現在のフレームが印刷されます。Flash オーサリング環境で使用できるオプションの数値。Flex アプリケーションを記述する場合には、このパラメータを省略するか、値 0 を指定します。

メモ : print()printAsBitmap()printAsBitmapNum()、または printNum() を使用して印刷する場合、複数のフレームを印刷する場合には、印刷するページを指定するために #p フレームラベルを使用するという方法がありました。PrintJob.addPage() を使用して複数のフレームを印刷するには、フレームごとに PrintJob.addPage() メソッドを使う必要があります。#p フレームラベルは無視されます。プログラムで行う方法については、「例」のセクションを参照してください。


スロー
Error PrintJob.start() を呼び出さなかった場合、またはユーザーが印刷ジョブをキャンセルした場合、例外がスローされます。

関連項目

send()メソッド 
public function send():void

PrintJob.start()PrintJob.addPage() が成功した後、スプールしたページをプリンタに送信します。PrintJob.start() の呼び出しが失敗した場合、または PrintJob.addpage() が例外をスローした場合、PrintJob.send() の呼び出しは成功しません。そのため PrintJob.start()true を返すことを確認し、PrintJob.send() の呼び出し前に PrintJob.addpage() 例外をキャッチしてください。次に例を示します。

var my_pj:PrintJob = new PrintJob();
if (my_pj.start()) {
try {
my_pj.addPage([params]);
   }
catch(e:Error) {
// エラーを処理します
   }
my_pj.send();
  }
  

関連項目

start()メソッド 
public function start():Boolean

オペレーティングシステムの [印刷] ダイアログボックスを表示し、スプールを開始し、PrintJob の読み取り専用プロパティ値を設定します。ユーザーは [印刷] ダイアログボックスで印刷設定を変更できます。PrintJob.start() メソッドが正常に返された場合、つまりユーザーが [印刷] ダイアログボックスで [OK] をクリックした場合、次の読み取り専用プロパティに値が渡され、ユーザーの現在の印刷設定を表します。

プロパティ タイプ 単位 メモ
PrintJob.paperHeight Number ポイント 用紙の高さ
PrintJob.paperWidth Number ポイント 用紙全体の幅
PrintJob.pageHeight Number ポイント 用紙上の実際の印刷可能領域の高さ。ユーザーが設定した余白は含みません。
PrintJob.pageWidth Number ポイント 用紙上の実際の印刷可能領域の幅。ユーザーが設定した余白は含みません。
PrintJob.orientation String "portrait" (flash.printing.PrintJobOrientation.PORTRAIT) または "landscape" (flash.printing.PrintJobOrientation.LANDSCAPE)。

メモ : [印刷] ダイアログボックスでキャンセルされると、プロパティが設定されません。

ユーザーが [印刷] ダイアログボックスで [OK] をクリックすると、オペレーティングシステムへの印刷ジョブのスプールが開始されます。オペレーティングシステムで印刷の進行状況について情報が表示されるため、ページをスプーラに送信したらただちに PrintJob.addPage() および PrintJob.send() を呼び出す必要があります。このメソッドに値を渡す読み取り専用の高さ、幅、方向のプロパティを使用し、印刷結果をフォーマットできます。

PrintJob.addPage()PrintJob.send() を呼び出す前に、このメソッドが true を返すこと (ユーザーがオペレーティングシステムの [印刷] ダイアログボックスで [OK] をクリックした場合) を確認するために、テストを行います。

var my_pj:PrintJob = new PrintJob();
if (my_pj.start()) {
// ここに addPage() および send() ステートメントを記述
     }
  

指定された印刷ジョブインスタンスの場合、次のいずれかの間隔が 15 秒以上である場合、次回の PrintJob.start() を呼び出すと false が返されます。

戻り値
Boolean — [印刷] ダイアログボックスでユーザーが [OK] をクリックした場合は true、ユーザーが [キャンセル] をクリックした場合、またはエラーが発生した場合は false を返します。

関連項目


次の例では、PrintJobExample クラスを使用して、小さなドキュメントを作成し、 そのドキュメントをプリンタに送信しますここでは以下の手順を実行します。
  1. Sprite 型の 2 変数 sheet1sheet2 を宣言します。
  2. init() を呼び出します。これにより、新しい Sprite インスタンスが sheet1 および sheet2 に割り当てられ、次に別の引数で createSheet() が呼び出されます。
  3. createSheet() により次のことを行います。
    1. 渡される Sprite オブジェクトは、四角形を描画するために使用されます。この四角形は、背景が明るい灰色で、 ボーダーが 1 ピクセル幅の黒色、位置は x = 0, y = 0 で、幅が 100 ピクセル、高さが 200 ピクセルです。
    2. txt という名前の新しい TextField オブジェクトが作成されます。このオブジェクトのサイズは Sprite と同じで、wordWrap プロパティは true、テキストプロパティは createSheet()
    3. に引数として渡された文字列に設定されます。
    4. 渡された Object 引数が null ではない場合、新しい Sprite インスタンスを作成します。このインスタンスの名前は img で、白い四角形を描画するために使用されます。この四角形の座標と大きさのプロパティは 渡された Object の値が使用されます。次を呼び出して、白い四角形を Sprite オブジェクトの表示リストに追加します。 addChild().
    5. 次を呼び出して、
    6. txt TextField を Sprite オブジェクトの表示リストに追加します。 addChild().
  4. コンストラクタに戻ると、有効な (コメントアウトされていない) 印刷メソッドが呼び出されます。これらの メソッドはよく似ているため、printOnePerPage() について次に説明します。
  5. printOnePerPage() により次のことを行います。
    1. pj という新しい PrintJob オブジェクトと、単位として pagesToPrint を宣言します。
    2. オペレーティングシステムに備わっている印刷ダイアログボックスを開き、ユーザーが [OK
    3. ] をクリックするまで待機します。
    4. 原点を確認し、[横] が選択されている場合は、エラーをスローして終了します。
    5. sheet1 および sheet2
    6. のページの高さと幅を設定します。
    7. addPage()
    8. を使用して sheet1 および sheet2 を印刷スプーラに送信します。
    9. 印刷するページ数が 1 ページ以上ある場合は、スプールされたページをすべて印刷します。
  6. draw() メソッドが呼び出されます。このメソッドは、ステージに合うように 2 つの Sprite プロパティの大きさを変更し、 sheet1
  7. のすぐ右側に来るように sheet2 の位置を変更します。

メモ : コンストラクタが設定され、3 つの印刷メソッドのいずれか ( 1 ページあたり 1 シート、 1 ページあたり 2 シート、ページの上半分のみ印刷) を環境設定に応じて選択できるようになります。 印刷メソッドのうちちょうど 2 つが無効な場合に限り、この例は適切に動作します。無効にするには、コード コメントを使用します。この例では、printOnePerPage() が呼び出されるように設定されます。

package {
    import flash.printing.PrintJob;
    import flash.printing.PrintJobOrientation;
    import flash.display.Stage;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.geom.Rectangle;
       
    public class PrintJobExample extends Sprite {
        private var sheet1:Sprite;
        private var sheet2:Sprite;
           
        public function PrintJobExample() {
            init();
            printOnePerPage();
//            printTwoPerPage();
//            printTopHalf();
            draw();
        }
        
        private function init():void {
            sheet1 = new Sprite();
            createSheet(sheet1, "Once upon a time...", {x:10, y:50, width:80, height:130});

            sheet2 = new Sprite();
            createSheet(sheet2, "There was a great story to tell, and it ended quickly.\n\nThe end.", null);
        }
        
        private function createSheet(sheet:Sprite, str:String, imgValue:Object):void {
            sheet.graphics.beginFill(0xEEEEEE);
            sheet.graphics.lineStyle(1, 0x000000);
            sheet.graphics.drawRect(0, 0, 100, 200);
            sheet.graphics.endFill();
            
            var txt:TextField = new TextField();
            txt.height = 200;
            txt.width = 100;
            txt.wordWrap = true;
            txt.text = str;
            
            if(imgValue != null) {
                var img:Sprite = new Sprite();
                img.graphics.beginFill(0xFFFFFF);
                img.graphics.drawRect(imgValue.x, imgValue.y, imgValue.width, imgValue.height);
                img.graphics.endFill();
                sheet.addChild(img);
            }
            sheet.addChild(txt);
        }
        
        private function printOnePerPage():void {
            var pj:PrintJob = new PrintJob();
            var pagesToPrint:uint = 0;
            if(pj.start()) {                
                if(pj.orientation == PrintJobOrientation.LANDSCAPE) {    
                    throw new Error("Without embedding fonts you must print one sheet per page with an orientation of portrait.");
                }
                
                sheet1.height = pj.pageHeight;
                sheet1.width = pj.pageWidth;
                sheet2.height = pj.pageHeight;
                sheet2.width = pj.pageWidth;

                try {
                    pj.addPage(sheet1);
                    pagesToPrint++;
                }
                catch(e:Error) {
                    // do nothing
                }

                try {
                    pj.addPage(sheet2);
                    pagesToPrint++;
                }
                catch(e:Error) {
                    // do nothing
                }

                if(pagesToPrint > 0) {
                    pj.send();
                }
            }
        }
        
        private function printTwoPerPage():void {
            var pj:PrintJob = new PrintJob();
            var pagesToPrint:uint = 0;
            if(pj.start()) {                
                if(pj.orientation == PrintJobOrientation.PORTRAIT) {
                    throw new Error("Without embedding fonts you must print two sheets per page with an orientation of landscape.");
                }
                
                sheet1.height = pj.pageHeight;
                sheet1.width = pj.pageWidth/2;
                sheet2.height = pj.pageHeight;
                sheet2.width = pj.pageWidth/2;

                var sheets:Sprite = new Sprite();
                sheets.addChild(sheet1);
                sheets.addChild(sheet2);
                sheets.getChildAt(1).x = sheets.getChildAt(0).width;
                try {
                    pj.addPage(sheets);
                    pagesToPrint++;
                }
                catch(e:Error) {
                    // do nothing
                }

                if(pagesToPrint > 0) {
                    pj.send();
                }
            }
        }

        private function printTopHalf():void {
            var pj:PrintJob = new PrintJob();
            var pagesToPrint:uint = 0;
            if(pj.start()) {                
                if(pj.orientation == PrintJobOrientation.PORTRAIT) {
                    throw new Error("Without embedding fonts you must print the top half with an orientation of landscape.");
                }
                
                sheet1.height = pj.pageHeight;
                sheet1.width = pj.pageWidth/2;
                sheet2.height = pj.pageHeight;
                sheet2.width = pj.pageWidth/2;

                var sheets:Sprite = new Sprite();
                sheets.addChild(sheet1);
                sheets.addChild(sheet2);
                sheets.getChildAt(1).x = sheets.getChildAt(0).width;
                try {
                    pj.addPage(sheets, new Rectangle(0, 0, sheets.width, sheets.height/2));
                    pagesToPrint++;
                }
                catch(e:Error) {
                    // do nothing
                }

                if(pagesToPrint > 0) {
                    pj.send();
                }
            }
        }


        private function draw():void {
            var sheetWidth:Number = this.stage.stageWidth/2;
            var sheetHeight:Number = this.stage.stageHeight;
            
            addChild(sheet1);
            sheet1.width = sheetWidth;
            sheet1.height = sheetHeight;
            
            addChild(sheet2);
            sheet2.width = sheetWidth;
            sheet2.height = sheetHeight;
            sheet2.x = sheet1.width;
        }        
    }
}