flash.printing
public class PrintJob
继承PrintJob Inheritance EventDispatcher Inheritance Object

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9

PrintJob 类用于创建内容并将其打印为一页或多页。 此类允许您呈现对用户为可见、动态或在屏幕以外的内容,通过一个“打印”对话框提示用户,以及按照与内容的比例相称的比例打印未缩放的文档。 此功能特别适用于呈现和打印动态内容,例如数据库内容和动态文本。

使用 PrintJob() 构造函数创建打印作业。

另外,利用由 PrintJob.start() 填充的属性,文档可以读取用户的打印机设置(如页高度、宽度和图像方向),而且您可以配置文档以动态方式设置适用于打印机设置的 Flash 内容的格式。 由 PrintJob.start() 填充的用户布局属性是只读的,Flash Player 不能对其进行更改。

注意:与 ActionScript 的先前版本不同,ActionScript 3.0 未将 PrintJob 对象限定在单帧。 然而,由于在用户单击“打印”对话框中的“确定”按钮之后,操作系统会向用户显示打印状态信息,所以应尽快调用 PrintJob.addPage()PrintJob.send(),以将页面发送到后台处理程序。 如果到达包含 PrintJob.send() 调用的帧时发生延迟,将会延迟打印过程。

另外,以下时间间隔存在 15 秒的脚本超时限制:

如果以上任何一个间隔时间超过了 15 秒,则对 PrintJob 实例的下一次 PrintJob.start() 调用将返回 false,并且对 PrintJob 实例的下一个 PrintJob.addPage() 将使 Flash Player 引发运行时异常。

查看示例

另请参见

打印基础知识
打印页面



公共 属性
 属性定义方
 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
 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 对象作为单个页发送到打印后台处理程序。
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 获得操作系统焦点并变为活动状态时调度。EventDispatcher
 Inherited Flash Player 失去操作系统焦点并变为非活动状态时调度。EventDispatcher
属性详细信息
orientation属性
orientation:String  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9.

图像的打印方向。 此属性是 PrintJobOrientation 类中的一个值。 仅当调用 PrintJob.start() 方法后,此属性才是可用的。


实现
    public function get orientation():String

另请参见

pageHeight属性 
pageHeight:int  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9.

页面上实际可打印区域的高度(以磅为单位)。 忽略用户设置的任何边距。 仅当调用 PrintJob.start() 方法后,此属性才是可用的。


实现
    public function get pageHeight():int

另请参见

pageWidth属性 
pageWidth:int  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9.

页面上实际可打印区域的宽度(以磅为单位)。 忽略用户设置的任何边距。 仅当调用 PrintJob.start() 方法后,此属性才是可用的。


实现
    public function get pageWidth():int

另请参见

paperHeight属性 
paperHeight:int  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9.

纸张总高度(以磅为单位)。 仅当调用 PrintJob.start() 方法后,此属性才是可用的。


实现
    public function get paperHeight():int
paperWidth属性 
paperWidth:int  [read-only]

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9.

纸张总宽度(以磅为单位)。 仅当调用 PrintJob.start() 方法后,此属性才是可用的。


实现
    public function get paperWidth():int
构造函数详细信息
PrintJob()构造函数
public function PrintJob()

语言版本 : ActionScript 3.0
Player 版本 : 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 对象仍处于活动状态时,您不能创建另一个对象。 如果在第一个 PrintJob 对象仍处于活动状态时创建第二个 PrintJob 对象(通过调用 new PrintJob()),则第二个 PrintJob 对象不会被创建。 因此,可以在创建第二个 PrintJob 之前检查 my_pj 值。


引发
IllegalOperationError — 如果另一 PrintJob 对象仍然处于活动状态,则将引发异常。

另请参见

方法详细信息
addPage()方法
public function addPage(sprite:Sprite, printArea:Rectangle = null, options:PrintJobOptions = null, frameNum:int = 0):void

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9.

将指定的 Sprite 对象作为单个页发送到打印后台处理程序。 在使用此方法之前,必须创建一个 PrintJob 对象,然后使用 PrintJob.start()。 然后,在对打印作业调用一次或多次 PrintJob.addPage() 之后,使用 PrintJob.send() 将经过后台处理的页发送到打印机。 也就是说,在创建一个 PrintJob 对象之后,要依次使用 PrintJob.start() PrintJob.addPage()PrintJob.send() 将打印作业发送到打印机。 可以在执行对 PrintJob.start() 的单次调用之后多次使用 PrintJob.addPage(),以便一次打印多页。

如果 PrintJob.addPage() 导致 Flash Player 引发异常(例如,如果您尚未调用 PrintJob.start() 或者用户取消了打印作业),则对 PrintJob.addPage() 的任何后续调用都将失败。 但是,如果此前对 PrintJob.addPage() 的调用成功,则最后的 PrintJob.send() 命令会将经后台成功处理的页发送到打印机。

如果打印作业用 15 秒以上的时间完成一次 PrintJob.addPage() 操作,则 Flash Player 将在下一次 Print.addPage() 调用时引发异常。

如果为 printArea 参数传递了值,则 printArea 对象的xy坐标将映射到页上可打印区域的左上角(0,0 坐标)。 可通过由 PrintJob.start() 设置的只读 pageHeightpageWidth 属性描述可打印区域。 因为打印输出与页上可打印区域的左上角对齐,所以如果 printArea 中定义的区域大于页上的可打印区域,则打印输出会在由 printArea 定义的区域的右边和/或底部被截断。 如果尚未为 printArea 传递值并且舞台大于可打印区域,则会发生同样类型的截断操作。

如果要在打印前对 Sprite 对象进行缩放,则可在调用此方法之前设置缩放属性(参见 flash.display.DisplayObject.scaleXflash.display.DisplayObject.scaleY),并在打印之后将它们重新设置为原始值。 Sprite 对象的缩放与 printArea 无关。 也就是说,如果指定一个 50 x 50 像素的打印区域,则会打印 2500 像素。 如果对 Sprite 对象进行缩放,则同样会打印 2500 像素,但是将按缩放后的大小打印 Sprite 对象。

Flash Player 打印功能支持 PostScript 和非 PostScript 打印机。 非 PostScript 打印机将矢量转换成位图。

参数

sprite:Sprite — 要打印的 Sprite 的实例名称。
 
printArea:Rectangle (default = null) — 指定要打印的区域的 Rectangle 对象。

矩形的宽度和高度以像素为单位。 打印机使用磅来作为打印的度量单位。 磅的实际大小是固定的(1/72 英寸),但是在屏幕上,像素的大小取决于特定屏幕的分辨率。 因此,像素和磅之间的转换比率取决于打印机设置以及 sprite 是否经过缩放。 一个 72 个像素宽的 sprite 在未经缩放的情况下打印输出将为一英寸宽,这时,一磅等于一个像素,且与屏幕分辨率无关。

您可以使用以下换算公式将英寸或厘米转换为缇或磅(1 缇为 1/chmetcnvTCSC0NumberType1NegativeFalseHasSpaceTrueSourceValue1UnitNamecm20 磅):

  • chmetcnvTCSC0NumberType1NegativeFalseHasSpaceTrueSourceValue1UnitNamecm一磅 = 1/72 英寸 = 20 缇
  • 1 英寸 = chmetcnvTCSC0NumberType1NegativeFalseHasSpaceTrueSourceValue1UnitNamecm72 磅 = 1440 缇
  • 1 厘米 = 567 缇

如果省略了 printArea 参数或错误地传递了该参数,则将打印 sprite 的整个区域。

如果您不希望指定 printArea 的值,而是希望指定 optionsframeNum 的值,请为 printArea 传递 null

 
options:PrintJobOptions (default = null) — 一个可选参数,指定是作为矢量打印还是作为位图打印。 默认值为 null,表示请求矢量打印。 要将 sprite 作为位图打印,请将 PrintJobOptions 对象的 printAsBitmap 属性设置为 true。 当确定是否将 printAsBitmap 设置为 true 时,请记住以下建议:
  • 如果要打印的内容包括位图图像,则请将 printAsBitmap 设置为 true,以包括任何 Alpha 透明度和色彩效果。
  • 如果内容不包含位图图像,则请省略此参数,以便以较高品质的矢量格式打印内容。

如果省略或错误传递了 options,则使用矢量打印。 如果您不希望指定 options 的值,而是希望指定 frameNumber 的值,请为 options 传递 null

 
frameNum:int (default = 0) — 一个可选数字,用于指定要打印的帧;传递 frameNum 不会导致调用该帧上的 ActionScript。 如果省略此参数,则打印 sprite 中的当前帧。

注意:如果以前曾使用 print()printAsBitmap()printAsBitmapNum()printNum() 从 Flash 进行打印,则可能在多个帧上使用了 #p 帧标签来指定要打印哪些页。 若要使用 PrintJob.addPage() 打印多个帧,必须对每个帧使用 PrintJob.addPage() 方法;#p 帧标签将被忽略。 有关以编程方式执行此操作的方法,请参阅 “示例”部分。


引发
Error — 如果未调用 PrintJob.start() 或用户取消了打印作业,则将引发异常

另请参见

send()方法 
public function send():void

语言版本 : ActionScript 3.0
Player 版本 : 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) { // 处理错误 } my_pj.send(); }
  

另请参见

start()方法 
public function start():Boolean

语言版本 : ActionScript 3.0
Player 版本 : Flash Player 9.

显示操作系统的“打印”对话框,开始后台处理,并设置 PrintJob 只读属性值。 通过“打印”对话框,用户可更改打印设置。 当 PrintJob.start() 方法成功返回时(用户在“打印”对话框中单击“确定”),会填充下列只读属性,它们代表用户的当前打印设置:

属性类型单位注释
PrintJob.paperHeight数量纸张整体高度。
PrintJob.paperWidth数量纸张整体宽度。
PrintJob.pageHeight数量页上实际可打印区域的高度;忽略用户设置的任何边距。
PrintJob.pageWidth数量页上实际可打印区域的宽度;忽略用户设置的任何边距。
PrintJob.orientationString"portrait" (flash.printing.PrintJobOrientation.PORTRAIT) 或 "landscape" (flash.printing.PrintJobOrientation.LANDSCAPE)。

注意:如果用户取消“打印”对话框,则不会填充属性。

当用户在“打印”对话框中单击“确定”之后,播放器开始在后台将打印作业处理到操作系统。 因为操作系统随后开始向用户显示有关打印过程的信息,所以应尽快调用 PrintJob.addPage()PrintJob.send() 调用,以将页发送到后台处理程序。 您可以使用此方法的只读 height、width 和 orientation 属性进行填充以设置打印输出格式。

进行测试,以查看此方法是否返回 true(当用户在操作系统的“打印”对话框中单击“确定”时),这应在对 PrintJob.addPage()PrintJob.send() 执行任何后续调用之前进行:

  var my_pj:PrintJob = new PrintJob(); if(my_pj.start()) { // addPage() 和 send() 语句的位置 }
  

对给定的打印作业实例而言,如果以下任何一个间隔的持续时间超过 15 秒,则对 PrintJob.start() 的下一次调用将返回 false

返回
Boolean — 如果出现“打印”对话框时用户单击“确定”,则返回 true;如果用户单击“取消”或出现错误,则返回 false

另请参见

示例 如何使用示例

以下示例使用类 PrintJobExample 来创建一个小文档,然后将该文档发送到打印机。 这是使用以下步骤完成的:
  1. 声明两个 Sprite 类型的变量,名称为 sheet1sheet2
  2. 调用 init(),它将一个新的 Sprite 实例同时赋给 sheet1sheet2,然后使用不同的参数调用 createSheet()
  3. createSheet() 进行以下操作:
    1. 传入的 Sprite 对象用来在 x = 0、y = 0 处绘制一个矩形,矩形具有浅灰色背景和一个像素宽的黑色边框,宽度为 100 像素,高度为 200 像素。
    2. 创建一个新的 TextField 对象,名为 txt,尺寸和 Sprite 相同,wordWrap 属性设置为 true,并且 text 属性设置为作为参数传递给 createSheet() 的 String。
    3. 如果传递的 Object 参数不是 null,则创建一个新的 Sprite 实例,名为 img,该实例使用所传递的 Object 的坐标和尺寸属性绘制一个白色矩形。 可将白色矩形添加到 Sprite 对象的显示列表中,方法是使用 addChild()
    4. 可将 txt TextField 添加到 Sprite 对象的显示列表中,方法是使用 addChild()
  4. 回到构造函数中,调用已启用的(不是被注释掉的)打印方法 由于方法非常相似,因此下面将描述 printOnePerPage()
  5. printOnePerPage() 进行以下操作:
    1. 声明一个新的 PrintJob 对象,名称为 pj,并将 pagesToPrint 声明为 unit 类型。
    2. 打开操作系统的本机打印对话框,并等待用户单击 OK
    3. 检查方向,如果选择了横向,则将引发错误并退出。
    4. 设置 sheet1sheet2 的页面高度和宽度。
    5. 使用 addPage()sheet1sheet2 发送到打印后台处理程序。
    6. 如果要打印的页数 > 0,则打印所有经过后台处理的页。
  6. 调用 draw() 方法,它调整两个 Sprite 属性的大小以适合舞台大小,并重新定位 sheet2,以便它紧挨着 sheet1 的右侧。

注意:设置构造函数后,可以根据首选项选择三种打印方法中的一种(每页一张,每页两张,或是在页面的上半部分打印)。 如果不使用代码注释禁用其中的两种打印方法,则此示例将不能正确运行 示例经过设置,以调用 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/flash/9.0_cn/ActionScriptLangRefV3/flash/printing/PrintJob.html