包 | flash.printing |
类 | public class PrintJob |
继承 | PrintJob EventDispatcher Object |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
移动浏览器支持:移动浏览器不支持此类。
AIR 配置文件支持:所有桌面操作系统均支持此功能,但移动设备或 AIR for TV 设备不支持此功能。您可以使用 PrintJob.isSupported
属性在运行时测试是否受支持。有关在多个配置文件之间支持 API 的详细信息,请参阅 AIR 配置文件支持。
使用 PrintJob()
构造函数创建打印作业。
此外,利用 PrintJob 类的属性,您可以读取用户的打印机设置(如页高度、宽度和图像方向),并且您可以配置文档以动态方式设置适用于打印机设置的 Flash 内容的格式。
注意:与 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 引发运行时异常。
属性 | 由以下参数定义 | ||
---|---|---|---|
active : Boolean [静态] [只读]
表示打印作业当前是否处于活动状态。 | PrintJob | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
copies : int
打印系统打印的、随后将添加到打印作业中的任何页面的备份数。 | PrintJob | ||
firstPage : int [只读]
用户在操作系统的“打印”对话框中输入的范围内的第一页的页码。 | PrintJob | ||
isColor : Boolean [只读]
表示当前选择的打印机(采用当前打印设置)使用彩色 (true) 打印还是灰度 (false) 打印。 | PrintJob | ||
isSupported : Boolean [静态] [只读]
表示当前平台上是否支持 PrintJob 类,支持为 true,不支持为 false。 | PrintJob | ||
jobName : String
打印作业的名称或标题。 | PrintJob | ||
lastPage : int [只读]
用户在操作系统的“打印”对话框中输入的范围内的最后一页的页码。 | PrintJob | ||
maxPixelsPerInch : Number [只读]
所选打印机的物理分辨率,以每英寸像素为单位。 | PrintJob | ||
orientation : String
图像的打印方向。 | PrintJob | ||
pageHeight : int [只读]
可在页面的实际可打印区域中居中放置的最大区域的高度,以点为单位。 | PrintJob | ||
pageWidth : int [只读]
可在页面的实际可打印区域中居中放置的最大区域的宽度,以点为单位。 | PrintJob | ||
paperArea : Rectangle [只读]
打印机介质的范围,以点为单位。 | PrintJob | ||
paperHeight : int [只读]
纸张总高度(以点为单位)。 | PrintJob | ||
paperWidth : int [只读]
纸张总宽度(以点为单位)。 | PrintJob | ||
printableArea : Rectangle [只读]
打印机介质的可打印区域的范围,以点为单位。 | PrintJob | ||
printer : String
获取或设置要用于当前打印作业的打印机。 | PrintJob | ||
printers : Vector.<String> [静态] [只读]
以 String 名称值的形式提供可用打印机的列表。 | PrintJob | ||
supportsPageSetupDialog : Boolean [静态] [只读]
表示 Flash 运行时环境是否支持单独的“页面设置”对话框。 | PrintJob |
方法 | 由以下参数定义 | ||
---|---|---|---|
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() 或 start2() 和 addPage() 方法后,将经过后台处理的页面发送到打印机。 | PrintJob | ||
设置循环操作动态属性的可用性。 | Object | ||
显示操作系统的“页面设置”对话框(如果当前环境支持该对话框)。 | PrintJob | ||
显示操作系统的“打印”对话框并开始后台处理。 | PrintJob | ||
选择性显示操作系统的“打印”对话框、开始后台处理,并可能修改 PrintJob 只读属性值。 | PrintJob | ||
表示打印作业应终止,不发送。 | PrintJob | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何祖代为指定事件类型注册了事件侦听器。 | EventDispatcher |
active | 属性 |
active:Boolean
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2 |
表示打印作业当前是否处于活动状态。打印作业在下列任一情况下处于活动状态(属性值是 true
):
- 正在显示“页面设置”或“打印”对话框。
- 已调用
start()
或start2()
方法(且返回值是true
),以及未调用send()
或terminate()
方法。
如果此属性是 true
并且调用了 showPageSetupDialog()
、start()
或 start2()
方法,则运行时将引发异常。
实现
public static function get active():Boolean
相关 API 元素
copies | 属性 |
firstPage | 属性 |
isColor | 属性 |
isSupported | 属性 |
jobName | 属性 |
jobName:String
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2 |
打印作业的名称或标题。通常,操作系统将作业名称作为打印队列中的作业的标题,或者作为打印到文件中的作业的默认名称。
如果尚未调用 start()
或 start2()
且尚未设置属性的值,则该属性的值为 null
。
对于您使用 PrintJob 实例执行的各个打印作业,请在调用 start()
或 start2()
方法之前设置此属性。
默认值为 null
。
实现
public function get jobName():String
public function set jobName(value:String):void
引发
IllegalOperationError — 当 active 属性为 true 时,如果代码尝试设置此属性。
|
lastPage | 属性 |
maxPixelsPerInch | 属性 |
orientation | 属性 |
orientation:String
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 9 - read only, AIR 1.0 - read only, AIR 2 - read-write |
图像的打印方向。可接受值被定义为 PrintJobOrientation 类中的常量。
注意:对于 AIR 2 或更高版本,请在开始打印作业之前设置此属性,以在“页面设置”和“打印”对话框中设置默认方向。在打印作业正在进行时(调用 start()
或 start2()
后)设置此属性,以设置作业中一系列页面的方向。
实现
public function get orientation():String
public function set orientation(value:String):void
相关 API 元素
pageHeight | 属性 |
pageWidth | 属性 |
paperArea | 属性 |
paperHeight | 属性 |
paperWidth | 属性 |
printableArea | 属性 |
printer | 属性 |
printer:String
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2 |
获取或设置要用于当前打印作业的打印机。已传递给 setter 并由 getter 返回的字符串应与由 printers()
方法返回的数组中的其中一个字符串相匹配。要表示应使用默认打印机,请将此值设置为 null
。在无法确定默认打印机的操作系统上,此属性的值为 null
。
import flash.printing.PrintJob; var myPrintJob:PrintJob = new PrintJob(); myPrintJob.printer = "HP_LaserJet_1"; myPrintJob.start();
设置该属性的值会尝试立即选择打印机。如果打印机选择失败,此属性的值将重置为以前的值。您可以确定设置打印机值是否成功,方法如下:在尝试设置此值后读取该值并确认它是否与设置的值一致。
处于活动状态的打印作业的 printer
属性无法更改。在成功调用 start()
或 start2()
方法之后且在调用 send()
或 terminate()
失败之前,尝试更改该值。
实现
public function get printer():String
public function set printer(value:String):void
printers | 属性 |
supportsPageSetupDialog | 属性 |
PrintJob | () | 构造函数 |
public function PrintJob()
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
创建一个可用于打印一页或多页的 PrintJob 对象。在创建一个 PrintJob 对象之后,需要依次使用 PrintJob.start()
、PrintJob.addPage()
和 PrintJob.send()
方法将打印作业发送到打印机。
例如,可以用自定义参数来替换 myPrintJob.addPage()
方法调用的 [params]
占位符文本,如以下代码中所示:
// create PrintJob object var myPrintJob:PrintJob = new PrintJob(); // display Print dialog box, but only initiate the print job // if start returns successfully. if (myPrintJob.start()) { // add specified page to print job // repeat once for each page to be printed try { myPrintJob.addPage([params]); } catch(e:Error) { // handle error } try { myPrintJob.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(). myPrintJob.send(); }
在 AIR 2 或更高版本中,您可以创建并使用多个 PrintJob 实例。打印完成后,对 PrintJob 实例设置的属性仍保留。这就允许您重用 PrintJob 实例并维持用户选择的打印首选项,同时还为应用程序中的其他内容提供不同的打印首选项。对于 Flash Player 和 AIR 版本 2 之前的版本中的内容,当某个 PrintJob 对象仍处于活动状态时,您无法再创建一个 PrintJob 对象。如果在第一个 PrintJob 对象仍处于活动状态时创建第二个 PrintJob 对象(通过调用 new PrintJob()
),则第二个 PrintJob 对象不会被创建。因此,在创建其他 PrintJob 之前,您可以查看 myPrintJob
值。
引发
IllegalOperationError — 在 Flash Player 和 AIR 2 之前的 AIR 中,如果其他 PrintJob 对象仍处于活动状态,将引发异常。
|
相关 API 元素
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 对象,然后使用 start()
或 start2()
。然后,在针对某个打印作业一次或多次调用 addPage()
后,请使用 send()
将经过后台处理的页发送到打印机。换言之,在创建 PrintJob 对象后,请使用(按照以下顺序)start()
或 start2()
、addPage()
和 send()
将打印作业发送到打印机。在打印作业中,在调用 start()
一次后,您可以多次调用 addPage()
以打印多个页面。
如果 addPage()
导致 Flash Player 引发异常(例如,如果您尚未调用 start()
或用户取消了打印作业),对 addPage()
的任何后续调用都会失败。但是,如果之前对 addPage()
的调用成功,则最后的 send()
命令将经后台成功处理的页发送到打印机。
如果打印作业用 15 秒以上的时间完成一次 addPage()
操作,则 Flash Player 在下一次调用 addPage()
时将引发异常。
如果为 printArea
参数传递了值,则 printArea
Rectangle 的 x
和 y
坐标将映射到页上可打印区域的左上角(0, 0 坐标)。只读属性 pageHeight
和 pageWidth
规定了由 start()
设置的可打印区域。因为打印输出与页面上可打印区域的左上角对齐,所以如果在 printArea
中定义的区域大于页面上的可打印区域,则打印输出会在由 printArea
定义的区域的右边和/或底部被截断。在 Flash Professional 中,如果没有为 printArea
传递值并且 Stage 大于可打印区域,则将发生此类型的剪裁。在 Flex 或 Flash Builder 中,如果没有为 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/20 点):
如果省略了 如果您不希望指定 | |
options:PrintJobOptions (default = null ) — 一个可选参数,指定是作为矢量打印还是作为位图打印。默认值为 null ,表示请求矢量打印。要将 sprite 作为位图打印,请将 PrintJobOptions 对象的 printAsBitmap 属性设置为 true 。当确定是否将 printAsBitmap 设置为 true 时,请记住以下建议:
如果省略或错误传递了 | |
frameNum:int (default = 0 ) — 一个可选数字,用于指定要打印的 MovieClip 对象的帧。传递 frameNum 不会调用此帧上的 ActionScript。如果省略此参数并且 sprite 参数是 MovieClip 对象,则打印 sprite 中的当前帧。
|
引发
Error — 如果您尚未调用 start() 或用户取消了打印作业,将引发异常
|
相关 API 元素
selectPaperSize | () | 方法 |
public function selectPaperSize(paperSize:String):void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2 |
设置页面大小。paperSize
参数可接受的值是 PaperSize 类中的常量。调用此方法将影响打印设置,如同用户在“页面设置”或“打印”对话框中选择页面大小。
您可以随时调用此方法。在开始打印作业之前调用此方法,以在“页面设置”和“打印”对话框中设置默认页面大小。在打印作业过程中调用此方法,以设置此作业中一系列页面的页面大小。
import flash.printing.PrintJob; import flash.printing.PaperSize; var myPrintJob:PrintJob = new PrintJob(); myPrintJob.selectPaperSize(PaperSize.ENV_10);
参数
paperSize:String — 在打印作业中用于后续页的页面大小
|
引发
ArgumentError — 如果 paperSize 参数不属于在 PaperSize 类中定义的可接受值。
|
相关 API 元素
send | () | 方法 |
public function send():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9. |
在成功调用 start()
或 start2()
和 addPage()
方法后,将经过后台处理的页面发送到打印机。
如果调用 start()
或 start2()
方法失败,或者如果调用 addPage()
方法时引发异常,则该方法不会成功。要避免发生错误,在调用此方法之前,请核实 start()
或 start2()
方法返回 true
并捕获任何 addPage()
异常。以下示例演示了如何在调用此方法之前正确检查错误:
var myPrintJob:PrintJob = new PrintJob(); if (myPrintJob.start()) { try { myPrintJob.addPage([params]); } catch(e:Error) { // handle error } myPrintJob.send(); }
相关 API 元素
showPageSetupDialog | () | 方法 |
public function showPageSetupDialog():Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2 |
显示操作系统的“页面设置”对话框(如果当前环境支持该对话框)。使用 supportsPageSetupDialog
属性确定是否支持“页面设置”。
import flash.printing.PrintJob; var myPrintJob:PrintJob = new PrintJob(); if (myPrintJob.supportsPageSetupDialog) { myPrintJob.showPageSetupDialog(); }
Boolean — 如果用户在“页面设置”对话框中选择“确定”,则为 true 。这表明某些 PrintJob 属性可能已更改。如果用户在“页面设置”对话框中选择“取消”,则返回 false 。
|
引发
IllegalOperationError — 如果此系统不支持“页面设置”。使用 supportsPageSetupDialog 属性确定是否支持“页面设置”。
| |
IllegalOperationError — 如果任何打印作业(包括当前作业)处于活动状态。
|
相关 API 元素
start | () | 方法 |
public function start():Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9., Flash Player 9. |
显示操作系统的“打印”对话框并开始后台处理。通过“打印”对话框,用户可更改打印设置。当 PrintJob.start()
方法成功返回时(用户单击“打印”对话框中的“确定”),将填充下列属性,从而显示用户选择的打印设置:
属性 | 类型 | 单位 | 注释 |
---|---|---|---|
PrintJob.paperHeight | Number | 点 | 纸张整体高度。 |
PrintJob.paperWidth | Number | 点 | 纸张整体宽度。 |
PrintJob.pageHeight | Number | 点 | 页上实际可打印区域的高度;忽略用户设置的任何边距。 |
PrintJob.pageWidth | Number | 点 | 页上实际可打印区域的宽度;忽略用户设置的任何边距。 |
PrintJob.orientation | 字符串 | "portrait" (flash.printing.PrintJobOrientation.PORTRAIT ) 或 "landscape" (flash.printing.PrintJobOrientation.LANDSCAPE )。 |
注意:如果用户取消“打印”对话框,则不会填充属性。
当用户在“打印”对话框中单击“确定”之后,播放器开始在后台将打印作业处理到操作系统。因为操作系统随后开始向用户显示有关打印过程的信息,所以应尽快调用 PrintJob.addPage()
和 PrintJob.send()
调用,以将页发送到后台处理程序。您可以使用此方法的只读 height、width 和 orientation 属性进行填充以设置打印输出格式。
进行测试,以查看此方法是否返回 true
(当用户在操作系统的“打印”对话框中单击“确定”时),这应在对 PrintJob.addPage()
和 PrintJob.send()
执行任何后续调用之前进行:
var myPrintJob:PrintJob = new PrintJob(); if(myPrintJob.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 。
|
引发
IllegalOperationError — 在 AIR 2 或更高版本中,如果其他 PrintJob 当前处于活动状态
|
相关 API 元素
start2 | () | 方法 |
public function start2(uiOptions:PrintUIOptions = null, showPrintDialog:Boolean = true):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2 |
选择性显示操作系统的“打印”对话框、开始后台处理,并可能修改 PrintJob 只读属性值。
uiOptions
参数允许调用方控制在“打印”对话框中显示哪些选项。请参见 PrintUIOptions
类。如果 showPrintDialog
为 false,则忽略此参数。
即使当 showPrintDialog
为 true
时,此方法的行为也可能与 start()
方法不同。在某些操作系统上,start()
在显示“页面设置”对话框后显示“打印”对话框。相反,start2()
从不显示“页面设置”对话框。
在下面的示例中,在向用户显示“打印”对话框之前,需要对其中的最小和最大页面设置进行设置:
import flash.printing.PrintJob; import flash.printing.PrintUIOptions; var myPrintJob:PrintJob = new PrintJob(); var uiOpt:PrintUIOptions = new PrintUIOptions(); uiOpt.minPage = 1; uiOpt.maxPage = 3; var accepted:Boolean = myPrintJob.start2(uiOpt);
参数
uiOptions:PrintUIOptions (default = null ) — 一个对象,指定在向用户显示的“打印”对话框中显示的选项。如果 showPrintDialog 参数是 false ,则忽略此值。
| |
showPrintDialog:Boolean (default = true ) — 在开始打印作业之前是否向用户显示“打印”对话框
|
Boolean — 如果用户在“打印”对话框出现时单击“确定”,或者未显示“打印”对话框而且未发生错误,则值为 true ;如果用户单击“取消”或有错误发生,值为 false 。
|
引发
IllegalOperationError — 如果正在显示“页面设置”对话框,或者如果其他打印作业当前处于活动状态
|
相关 API 元素
terminate | () | 方法 |
public function terminate():void
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2 |
表示打印作业应终止,不发送。当打印作业已通过调用 start()
或 start2()
启动,但不适合将任何页面发送到打印机时,请使用此方法。通常,terminate()
仅用于从错误恢复。
在调用此方法后,PrintJob 实例可以重用。尽可能保留作业的打印设置以供后续使用。
addPage()
方法会将该 sprite 作为单个页添加。send()
方法将该页后台打印到打印机。
package { import flash.printing.PrintJob; import flash.display.Sprite; public class BasicPrintExample extends Sprite { var myPrintJob:PrintJob = new PrintJob(); var mySprite:Sprite = new Sprite(); mySprite.graphics.beginFill(0x336699); mySprite.graphics.drawCircle(100, 100, 50); public function BasicPrintExample() { if (myPrintJob.start()) { try { myPrintJob.addPage(mySprite); } catch(e:Error) { // handle error } myPrintJob.send(); } } }
PrintJobExample
来创建一个小文档,然后将该文档发送到打印机。这是使用以下步骤完成的:
- 声明两个 Sprite 类型的变量,名称为
sheet1
和sheet2
。 - 调用
init()
,它将一个新的 Sprite 实例同时赋给sheet1
和sheet2
,然后使用不同的参数调用createSheet()
。 createSheet()
进行以下操作:- 传入的 Sprite 对象用来在 x = 0、y = 0 处绘制一个矩形,矩形具有浅灰色背景和一个像素宽的黑色边框,宽度为 100 像素,高度为 200 像素。
- 创建一个新的 TextField 对象,名为
txt
,尺寸和 Sprite 相同,wordWrap 属性设置为true
,并且 text 属性设置为作为参数传递给createSheet()
的 String。 - 如果传递的 Object 参数不是 null,则创建一个新的 Sprite 实例,名为
img
,该实例使用所传递的 Object 的坐标和尺寸属性绘制一个白色矩形。可将白色矩形添加到 Sprite 对象的显示列表中,方法是使用addChild()
。 - 可将
txt
TextField 添加到 Sprite 对象的显示列表中,方法是使用addChild()
。
- 回到构造函数中,调用已启用的(不是被注释掉的)打印方法 由于方法非常相似,因此下面将描述
printOnePerPage()
。 printOnePerPage()
进行以下操作:- 声明一个新的 PrintJob 对象,名称为
pj
,并将pagesToPrint
声明为 unit 类型。 - 打开操作系统的本机打印对话框,并等待用户单击
OK
。 - 检查方向,如果选择了横向,则将引发错误并退出。
- 设置
sheet1
和sheet2
的页面高度和宽度。 - 使用
addPage()
将sheet1
和sheet2
发送到打印后台处理程序。 - 如果要打印的页数 > 0,则打印所有经过后台处理的页。
- 声明一个新的 PrintJob 对象,名称为
- 调用
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; } } }
package { import flash.display.Sprite; import flash.display.Stage; import flash.geom.Rectangle; import flash.printing.PaperSize; import flash.printing.PrintJob; import flash.printing.PrintJobOrientation; import flash.printing.PrintUIOptions; import flash.text.TextField; public class PrintJobExample extends Sprite { private var bg:Sprite; private var txt:TextField; private var pj:PrintJob; private var uiOpt:PrintUIOptions; public function PrintJobExample():void { var pj = new PrintJob(); uiOpt = new PrintUIOptions(); initPrintJob(); initContent(); draw(); printPage(); } private function printPage():void { if (pj.supportsPageSetupDialog) { pj.showPageSetupDialog(); } if (pj.start2(uiOpt, true)) { try { pj.addPage(this, new Rectangle(0, 0, 100, 100)); } catch (error:Error) { // Do nothing. } pj.send(); } else { txt.text = "Print job terminated"; pj.terminate(); } } private function initContent():void { bg = new Sprite(); bg.graphics.beginFill(0x00FF00); bg.graphics.drawRect(0, 0, 100, 200); bg.graphics.endFill(); txt = new TextField(); txt.border = true; txt.text = "Hello World"; } private function initPrintJob():void { pj.setPaperSize(PaperSize.LEGAL); pj.orientation = PrintJobOrientation.LANDSCAPE; pj.copies = 2; pj.jobName = "Flash test print"; } private function draw():void { addChild(bg); addChild(txt); txt.x = 50; txt.y = 50; } } }
Tue Jun 12 2018, 11:04 AM Z