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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

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 または Adobe AIR からランタイム例外がスローされます。

例を表示

関連項目

Basics of printing
Printing a page


パブリックプロパティ
 プロパティ定義元
 Inheritedconstructor : Object
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
Object
  orientation : String
[読み取り専用] 印刷するイメージの向きです。
PrintJob
  pageHeight : int
[読み取り専用] ページ上で実際に印刷可能な領域の高さ (ポイント単位) です。
PrintJob
  pageWidth : int
[読み取り専用] ページ上で実際に印刷可能な領域の幅 (ポイント単位) です。
PrintJob
  paperHeight : int
[読み取り専用] 用紙全体の高さ (ポイント単位) です。
PrintJob
  paperWidth : int
[読み取り専用] 用紙全体の幅 (ポイント単位) です。
PrintJob
 Inheritedprototype : Object
[静的] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
Object
パブリックメソッド
 メソッド定義元
  
ページを印刷できる PrintJob オブジェクトを作成します。
PrintJob
 Inherited
addEventListener(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
 Inherited
イベントをイベントフローに送出します。
EventDispatcher
 Inherited
EventDispatcher オブジェクトに、特定のイベントタイプに対して登録されたリスナーがあるかどうかを確認します。
EventDispatcher
 Inherited
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
Object
 Inherited
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
Object
 Inherited
指定されたプロパティが存在し、列挙できるかどうかを示します。
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
EventDispatcher オブジェクトからリスナーを削除します。
EventDispatcher
  
PrintJob.start() と PrintJob.addPage() が成功した後、スプールしたページをプリンタに送信します。
PrintJob
 Inherited
ループ処理に対するダイナミックプロパティの可用性を設定します。
Object
  
オペレーティングシステムの印刷ダイアログボックスを表示し、スプールを開始し、PrintJob の読み取り専用プロパティ値を設定します。
PrintJob
 Inherited
指定されたオブジェクトのストリング表現を返します。
Object
 Inherited
指定されたオブジェクトのプリミティブな値を返します。
Object
 Inherited
指定されたイベントタイプについて、この EventDispatcher オブジェクトまたはその祖先にイベントリスナーが登録されているかどうかを確認します。
EventDispatcher
イベント
 イベント 概要 定義元
 Inherited[ブロードキャスト イベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを取得して、アクティブになったときに送出されます。EventDispatcher
 Inherited[ブロードキャスト イベント] Flash Player または AIR アプリケーションがオペレーティングシステムのフォーカスを失って、非アクティブになったときに送出されます。EventDispatcher
プロパティの詳細
orientationプロパティ
orientation:String  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9.

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



実装
    public function get orientation():String

関連項目

pageHeightプロパティ 
pageHeight:int  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9.

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



実装
    public function get pageHeight():int

関連項目

pageWidthプロパティ 
pageWidth:int  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9.

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



実装
    public function get pageWidth():int

関連項目

paperHeightプロパティ 
paperHeight:int  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9.

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



実装
    public function get paperHeight():int
paperWidthプロパティ 
paperWidth:int  [読み取り専用]

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9.

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



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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9

ページを印刷できる 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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9.

指定の 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 の値を指定しなかったときにも、同様の切り取りが発生します。

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

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

パラメータ

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

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

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

  • 1 ポイント = 1/72 インチ = 20 twip
  • 1 インチ = 72 ポイント = 1440 twip
  • 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 を指定します。

メモ : Adobe AIR では、Mac OS のベクトル形式印刷はサポートされていません。

 
frameNum:int (default = 0)Flash オーサリング環境で使用できるオプションの数値です。Flex アプリケーションを記述する場合には、このパラメータを省略するか、値 0 を指定します。


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

関連項目

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

言語バージョン: ActionScript 3.0
ランタイムバージョン: AIR 1.0 Flash Player 9.

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

     var my_pj:PrintJob = new PrintJob();
     if (my_pj.start()) {
       try {
         my_pj.addPage([params]);
       }
       catch(e:Error) {
          // handle error 
       }
            my_pj.send();
     }
     

関連項目

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

言語バージョン: ActionScript 3.0
ランタイムバージョン: Flash Player 9., Flash Player 9.

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

プロパティ単位メモ
PrintJob.paperHeightNumberポイント用紙の高さ
PrintJob.paperWidthNumberポイント用紙全体の幅
PrintJob.pageHeightNumberポイント用紙上の実際の印刷可能領域の高さ。ユーザーが設定した余白は含みません。
PrintJob.pageWidthNumberポイント用紙上の実際の印刷可能領域の幅。ユーザーが設定した余白は含みません。
PrintJob.orientationString"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() and send() statements here
        }
     

特定の印刷ジョブインスタンスでは、次の間隔のいずれかが 15 秒を超えると、PrintJob.start() の次の呼び出しによって false が返されます。

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

関連項目

例の使用法
PrintJobExample.as

次の例では、クラス PrintJobExample を使用して小さな文書を作成し、その文書をプリンタに送ります。ここでは以下の手順を実行します。
  1. sheet1 および sheet2 という名前の Sprite 型の 2 つの変数を宣言します。
  2. init() を呼び出します。これは、新しい Sprite インスタンスを sheet1sheet2 に割り当てた後、別の引数を使用して createSheet() を呼び出します。
  3. createSheet() は、以下の処理を行います。
  4. コンストラクタに戻ると、有効な(コメントアウトされていない)印刷メソッドが呼び出されます。これらのメソッドは非常に似ているため、printOnePerPage() については後で説明します。
  5. printOnePerPage() は、以下の処理を行います。
  6. draw() メソッドが呼び出されます。このメソッドによりステージに合わせて 2 つの Sprite プロパティのサイズが変更され、sheet2sheet1 の右側になるように再配置されます。

メモ:コンストラクタは、必要に応じて、ページあたり 1 シート、ページあたり 2 シート、またはページの上半分に印刷の 3 つの印刷メソッドのいずれかを選択できるように設定されます。コードコメントを使用して印刷メソッドのうちちょうど 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;
        }        
    }
}




 

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flex/3_jp/langref/flash/printing/PrintJob.html