包 | flash.printing |
类 | public class PrintJob |
继承 | PrintJob EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9 |
使用 PrintJob()
构造函数创建打印作业。
另外,利用由 PrintJob.start()
填充的属性,文档可以读取用户的打印机设置(如页高度、宽度和图像方向),而且您可以配置文档以动态方式设置适用于打印机设置的 Flash 内容的格式。由 PrintJob.start()
填充的用户布局属性是只读的,Flash Player 不能对其进行更改。
注意:与 ActionScript 的先前版本不同,ActionScript 3.0 未将 PrintJob 对象限定在单帧。然而,由于在用户单击“打印”对话框中的“确定”按钮之后,操作系统会向用户显示打印状态信息,所以应尽快调用 PrintJob.addPage()
和 PrintJob.send()
,以将页面发送到后台处理程序。如果到达包含 PrintJob.send()
调用的帧时发生延迟,将会延迟打印过程。
另外,以下时间间隔存在 15 秒的脚本超时限制:
PrintJob.start()
和第一个 PrintJob.addPage()
PrintJob.addPage()
和下一个 PrintJob.addPage()
PrintJob.addPage()
和 PrintJob.send()
如果以上任何一个间隔时间超过了 15 秒,则对 PrintJob 实例的下一次 PrintJob.start()
调用将返回 false
,并且对 PrintJob 实例的下一个 PrintJob.addPage()
将使 Flash Player 或 Adobe AIR 引发运行时异常。
另请参见
属性 | 定义方 | ||
---|---|---|---|
constructor : 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 | ||
prototype : Object [静态]
对类或函数对象的原型对象的引用。 | Object |
方法 | 定义方 | ||
---|---|---|---|
PrintJob() 创建一个可用于打印一页或多页的 PrintJob 对象。 | PrintJob | ||
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 | ||
将事件调度到事件流中。 | EventDispatcher | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
指示对象是否已经定义了指定的属性。 | Object | ||
指示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
指示指定的属性是否存在、是否可枚举。 | Object | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
在 PrintJob.start() 和 PrintJob.addPage() 成功之后,将经过后台处理的页发送到打印机。 | PrintJob | ||
设置循环操作动态属性的可用性。 | Object | ||
显示操作系统的“打印”对话框,开始后台处理,并设置 PrintJob 只读属性值。 | PrintJob | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何始祖为指定事件类型注册了事件侦听器。 | EventDispatcher |
orientation | 属性 |
orientation:String
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9. |
图像的打印方向。此属性是 PrintJobOrientation 类中的一个值。仅当调用 PrintJob.start()
方法后,此属性才是可用的。
public function get orientation():String
另请参见
pageHeight | 属性 |
pageHeight:int
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9. |
页面上实际可打印区域的高度(以磅为单位)。忽略用户设置的任何边距。仅当调用 PrintJob.start()
方法后,此属性才是可用的。
public function get pageHeight():int
另请参见
pageWidth | 属性 |
pageWidth:int
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9. |
页面上实际可打印区域的宽度(以磅为单位)。忽略用户设置的任何边距。仅当调用 PrintJob.start()
方法后,此属性才是可用的。
public function get pageWidth():int
另请参见
paperHeight | 属性 |
paperHeight:int
[只读 (read-only)] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0 Flash Player 9. |
纸张总高度(以磅为单位)。仅当调用 PrintJob.start()
方法后,此属性才是可用的。
public function get paperHeight():int
paperWidth | 属性 |
paperWidth:int
[只读 (read-only)] 语言版本: | 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]
占位符文本,如以下代码中所示:
在第一个 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 |
运行时版本: | AIR 1.0 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
对象的 x
和 y
坐标将映射到页上可打印区域的左上角(0,0 坐标)。可通过由 PrintJob.start()
设置的只读 pageHeight
和 pageWidth
属性描述可打印区域。因为打印输出与页上可打印区域的左上角对齐,所以如果 printArea
中定义的区域大于页上的可打印区域,则打印输出会在由 printArea
定义的区域的右边和/或底部被截断。
如果要在打印前对 Sprite 对象进行缩放,则可在调用此方法之前设置缩放属性(参见 flash.display.DisplayObject.scaleX
和 flash.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 磅):
如果省略了
如果您不希望指定 | |
options:PrintJobOptions (default = null ) —
一个可选参数,指定是作为矢量打印还是作为位图打印。默认值为 null ,表示请求矢量打印。要将 sprite 作为位图打印,请将 PrintJobOptions 对象的 printAsBitmap 属性设置为 true 。当确定是否将 printAsBitmap 设置为 true 时,请记住以下建议:
如果省略或错误传递了 注意:Adobe AIR 在 Mac OS 中不支持矢量打印。 | |
frameNum:int (default = 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()
方法成功返回时(用户在“打印”对话框中单击“确定”),会填充下列只读属性,它们代表用户的当前打印设置:
属性 | 类型 | 单位 | 注释 |
---|---|---|---|
PrintJob.paperHeight
| 数量 | 磅 | 纸张整体高度。 |
PrintJob.paperWidth
| 数量 | 磅 | 纸张整体宽度。 |
PrintJob.pageHeight
| 数量 | 磅 | 页上实际可打印区域的高度;忽略用户设置的任何边距。 |
PrintJob.pageWidth
| 数量 | 磅 | 页上实际可打印区域的宽度;忽略用户设置的任何边距。 |
PrintJob.orientation
| String |
"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() and send() statements here }
对给定的打印作业实例而言,如果以下任何一个间隔的持续时间超过 15 秒,则对 PrintJob.start()
的下一次调用将返回 false
:
PrintJob.start()
和第一个 PrintJob.addPage()
PrintJob.addPage()
和下一个 PrintJob.addPage()
PrintJob.addPage()
和 PrintJob.send()
Boolean —
如果出现“打印”对话框时用户单击“确定”,则返回 true ;如果用户单击“取消”或出现错误,则返回 false 。
|
另请参见
PrintJobExample
来创建一个小文档,然后将该文档发送到打印机。这是使用以下步骤完成的:
sheet1
和 sheet2
。
init()
,它将一个新的 Sprite 实例同时赋给 sheet1
和 sheet2
,然后使用不同的参数调用 createSheet()
。
createSheet()
进行以下操作:
printOnePerPage()
。
printOnePerPage()
进行以下操作:
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; } } }