flash.printingPrintUIOptions PrintUIOptions 类用于指定要显示给用户的“打印”对话框中的选项。Object PrintUIOptions 类用于指定要显示给用户的“打印”对话框中的选项。创建一个 PrintUIOptions 实例,设置其属性,然后将其作为 PrintJob.showPageSetupDialog()PrintJob.start2() 方法的 uiOptions 参数传递。

例如,显示“页面设置”对话框时,以下代码使用 PrintUIOptions 实例指定最小和最大页码:

import flash.printing.PrintJob; var myPrintJob:PrintJob = new PrintJob(); if (myPrintJob.supportsPageSetupDialog) { var uiOpt:PrintUIOptions = new PrintUIOptions(); uiOpt.minPage = 1; uiOpt.maxPage = 3; myPrintJob.showPageSetupDialog(uiOpt); }
PrintJobPrintJob.showPageSetupDialog()PrintJob.start2()PrintUIOptions 创建新 PrintUIOptions 对象。 创建新 PrintUIOptions 对象。将此对象传递给 PrintJob.showPageSetupDialog()PrintJob.start2() 方法的 uiOptions 参数。 PrintJob.showPageSetupDialog()PrintJob.start2()disablePageRange 指定禁用打印对话框中的页面范围 (true) 还是用户可以对其进行编辑 (false)。falseBooleanfalse 指定禁用“打印”对话框中的页面范围 (true) 还是用户可以对其进行编辑 (false)。默认值为 false,表示对编辑页面范围无限制。 maxPage 用户可以在打印对话框中输入的最大页码。0uint0 用户可以在打印对话框中输入的最大页码。默认值为 0,表示对最大页码无限制。 minPage 用户可以在“打印”对话框中输入的最小页码。0uint0 用户可以在“打印”对话框中输入的最小页码。默认值为 0,表示对最小页码无限制。
PrintMethod 此类为 PrintJobOptions.printMethod 属性提供值以指定打印页面的方法。Object 此类为 PrintJobOptions.printMethod 属性提供值以指定打印页面的方法。 PrintJobOptions.printMethodAUTO 对最佳打印方法的自动选择。autoString 对最佳打印方法的自动选择。此值表示根据要打印的内容自动选择矢量打印或位图打印。只要内容可由该方法忠实地复制,即使用矢量打印。如果存在透明效果或某些其他效果,将使用位图打印。

此常量与 PrintJobOptions.printMethod 属性一起使用。使用语法 PrintMethod.AUTO

PrintJobOptions.printMethodVECTORBITMAP
BITMAP 位图打印方法。bitmapString 位图打印方法。

此常量与 PrintJobOptions.printMethod 属性一起使用。使用语法 PrintMethod.BITMAP

PrintJobOptions.printMethodVECTORAUTO
VECTOR 矢量打印方法。vectorString 矢量打印方法。

此常量与 PrintJobOptions.printMethod 属性一起使用。使用语法 PrintMethod.VECTOR

PrintJobOptions.printMethodBITMAPAUTO
PrintJobOptions PrintJobOptions 类所包含的属性与 PrintJob.addPage() 方法的 options 参数配合使用。Object PrintJobOptions 类所包含的属性与 PrintJob.addPage() 方法的 options 参数配合使用。有关 addPage() 的详细信息,请参见 PrintJob 类。 PrintJobPrintJob.addPage()PrintJobOptions 创建一个新的 PrintJobOptions 对象。printAsBitmapBooleanfalse如果为 true,则此对象作为位图打印。如果为 false,则此对象作为矢量图打印。

如果要打印的内容包括位图图像,则请将 printAsBitmap 属性设置为 true,以包括任何 Alpha 透明度和色彩效果。如果内容不包含位图图像,则请省略此参数,以便以较高品质的矢量格式(默认选项)打印内容。

注意:Adobe AIR 在 Mac OS 中不支持矢量打印。

创建一个新的 PrintJobOptions 对象。将此对象传递给 PrintJob.addPage() 方法的 options 参数。
PrintJob.addPage()
pixelsPerInch 指定位图使用的分辨率,以每英寸像素为单位。NaNNumber 指定位图使用的分辨率,以每英寸像素为单位。默认值是 Number.NaN,表明使用本机打印机分辨率。

此分辨率设置适用于位图和矢量打印。对于位图打印,分辨率控制如何将整张页面栅格化。对于矢量打印,分辨率控制如何将特定内容(如位图和渐变)栅格化。

printAsBitmap 指定打印作业中的内容是将作为位图打印还是将作为矢量打印。falseBoolean 指定打印作业中的内容是将作为位图打印还是将作为矢量打印。默认值是 false,代表矢量打印。

如果要打印的内容包括位图图像,则请将 printAsBitmap 设置为 true,以包括任何 Alpha 透明度和色彩效果。如果内容不包括位图图像,则使用较高品质的矢量格式(默认选项)打印内容。

例如,要将内容作为位图打印,请使用以下语法:

var options:PrintJobOptions = new PrintJobOptions(); options.printAsBitmap = true; myPrintJob.addPage(mySprite, null, options);

注意:Adobe AIR 在 Mac OS 中不支持矢量打印。

下面的示例先加载一幅图片并放在矩形帧中,然后将该图片作为位图进行打印。
  1. 构造函数使用 LoaderURLRequest 对象加载该图片 (image.jpg)。它还会检查在加载过程中是否发生了错误。此处,假定该文件位于与 SWF 文件相同的目录中。需要编译 SWF 文件,并将“本地播放安全性”设置为“只访问本地文件”。
  2. 在加载图片后(event 为 complete),将调用 completeHandler() 方法。
  3. completeHandler() 方法创建一个 BitmapData 对象,并在其中加载该图片(位图)。将在 Sprite 对象中绘制一个矩形 (frame),并使用 beginBitmapFill() 方法在矩形中填充该图片(BitmapData 对象)。还使用了 Matrix 对象缩放图像以适应该矩形。(请注意,这会使图像发生扭曲。本示例中使用此对象是为了确保图像与矩形相适应。) 在填充图像后,将调用 printPage() 方法。
  4. printPage() 方法创建一个新的打印作业实例,启动打印过程(将为用户调用打印对话框)并填充打印作业属性。addPage() 方法包含有关打印作业的详细信息。此处,将包含图片(Sprite 对象)的帧设置为作为位图打印,而不是作为矢量图形打印。optionsPrintJobOptions 类的实例,并将其属性 printAsBitmap 设置为 true,以便作为位图打印(默认设置为 false)。

注意:仅为本示例定义了非常有限的错误处理代码。

package { import flash.display.Sprite; import flash.display.Loader; import flash.display.Bitmap; import flash.display.BitmapData; import flash.printing.PrintJob; import flash.printing.PrintJobOptions; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLRequest; import flash.geom.Matrix; public class printAsBitmapExample extends Sprite { private var frame:Sprite = new Sprite(); private var url:String = "image.jpg"; private var loader:Loader = new Loader(); public function printAsBitmapExample() { var request:URLRequest = new URLRequest(url); loader.load(request); loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); } private function completeHandler(event:Event):void { var picture:Bitmap = Bitmap(loader.content); var bitmap:BitmapData = picture.bitmapData; var matrix:Matrix = new Matrix(); matrix.scale((200 / bitmap.width), (200 / bitmap.height)); frame.graphics.lineStyle(10); frame.graphics.beginBitmapFill(bitmap, matrix, true); frame.graphics.drawRect(0, 0, 200, 200); frame.graphics.endFill(); addChild(frame); printPage(); } private function ioErrorHandler(event:IOErrorEvent):void { trace("Unable to load the image: " + url); } private function printPage ():void { var myPrintJob:PrintJob = new PrintJob(); var options:PrintJobOptions = new PrintJobOptions(); options.printAsBitmap = true; myPrintJob.start(); try { myPrintJob.addPage(frame, null, options); } catch(e:Error) { trace ("Had problem adding the page to print job: " + e); } try { myPrintJob.send(); } catch (e:Error) { trace ("Had problem printing: " + e); } } } }
PrintJobOptions.printMethod
printMethod 指定 Flash 运行时选择最合适的打印方法,或创作者希望显式选择矢量或位图打印。String指定的 printMethod 不是在 PrintMethod 类中定义的值之一。 ArgumentErrorArgumentError 指定 Flash 运行时选择最合适的打印方法,或创作者希望显式选择矢量或位图打印。

将此属性设置为在 PrintMethod 类中定义的下列值之一:

  • PrintMethod.AUTO:指定根据要打印的内容,自动选择矢量或位图打印。只要内容可由该方法忠实地复制,即使用矢量打印。如果存在透明效果或某些其他效果,将使用位图打印。
  • PrintMethod.VECTOR:指定矢量打印。此设置与将 printAsBitmap 设置为 false 等效。
  • PrintMethod.BITMAP:指定位图打印。与将 printAsBitmap 设置为 true 等效。

如果将 printMethod 设置为这些支持的值之一,则将忽略 printAsBitmap。

默认值是 null;使用 printAsBitmap 属性。

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

移动浏览器支持:移动浏览器不支持此类。

AIR 配置文件支持:所有桌面操作系统均支持此功能,但移动设备或用于电视的 AIR 设备不支持此功能。您可以使用 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 引发运行时异常。

以下示例显示打印的基本过程。新建了一个 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 来创建一个小文档,然后将该文档发送到打印机。这是使用以下步骤完成的:
  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; } } }
以下示例显示了一些其他的打印功能。本示例提供了有关打印份数、纸张大小 (legal) 和页面方向(横向)的初始化 PrintJob 设置。它会强制首先显示“页面设置”对话框,然后通过显示“打印”对话框来启动打印作业。 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; } } }
PrintJob 创建一个可用于打印一页或多页的 PrintJob 对象。 在 Flash Player 和 AIR 2 之前的 AIR 中,如果其他 PrintJob 对象仍处于活动状态,将引发异常。 IllegalOperationErrorflash.errors:IllegalOperationError 创建一个可用于打印一页或多页的 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 值。

PrintJob.addPage()PrintJob.send()PrintJob.start()
addPage 将指定的 Sprite 对象作为单个页发送到打印后台处理程序。如果您尚未调用 start() 或用户取消了打印作业,将引发异常 ErrorErrorspriteflash.display:Sprite包含要打印内容的 Sprite。 printAreaflash.geom:Rectanglenull 指定要打印的区域的 Rectangle 对象。

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

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

  • 一点 = 1/72 英寸 = 20 缇
  • 1 英寸 = 72 点 = 1440 缇
  • 1 厘米 = 567 缇

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

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

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

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

frameNumint0一个可选数字,用于指定要打印的 MovieClip 对象的帧。传递 frameNum 不会调用此帧上的 ActionScript。如果省略此参数并且 sprite 参数是 MovieClip 对象,则打印 sprite 中的当前帧。
将指定的 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 的 xy 坐标将映射到页上可打印区域的左上角(0, 0 坐标)。只读属性 pageHeightpageWidth 规定了由 start() 设置的可打印区域。因为打印输出与页面上可打印区域的左上角对齐,所以如果在 printArea 中定义的区域大于页面上的可打印区域,则打印输出会在由 printArea 定义的区域的右边和/或底部被截断。在 Flash Professional 中,如果没有为 printArea 传递值并且 Stage 大于可打印区域,则将发生此类型的剪裁。在 Flex 或 Flash Builder 中,如果没有为 printArea 传递值并且屏幕大于可打印区域,则将发生此类型的剪裁。

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

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

PrintJob.send()PrintJob.start()DisplayObject 类
selectPaperSize 设置页面大小。如果 paperSize 参数不属于在 PaperSize 类中定义的可接受值。 ArgumentErrorArgumentErrorpaperSizeString在打印作业中用于后续页的页面大小 设置页面大小。paperSize 参数可接受的值是 PaperSize 类中的常量。调用此方法将影响打印设置,如同用户在“页面设置”或“打印”对话框中选择页面大小。

您可以随时调用此方法。在开始打印作业之前调用此方法,以在“页面设置”和“打印”对话框中设置默认页面大小。在打印作业过程中调用此方法,以设置此作业中一系列页面的页面大小。

import flash.printing.PrintJob; import flash.printing.PaperSize; var myPrintJob:PrintJob = new PrintJob(); myPrintJob.selectPaperSize(PaperSize.ENV_10);
PaperSizePrintJob.send()
send 在成功调用 start() 或 start2() 和 addPage() 方法后,将经过后台处理的页面发送到打印机。 在成功调用 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(); }
PrintJob.addPage()PrintJob.start()PrintJob.start2()
showPageSetupDialog 显示操作系统的“页面设置”对话框,如果当前环境支持该对话框。如果此系统不支持“页面设置”。使用 supportsPageSetupDialog 属性确定是否支持“页面设置”。 IllegalOperationErrorflash.errors:IllegalOperationError如果任何打印作业(包括当前作业)处于活动状态。 IllegalOperationErrorflash.errors:IllegalOperationError如果用户在“页面设置”对话框中选择“确定”,则为 true。这表明某些 PrintJob 属性可能已更改。如果用户在“页面设置”对话框中选择“取消”,则返回 falseBoolean 显示操作系统的“页面设置”对话框(如果当前环境支持该对话框)。使用 supportsPageSetupDialog 属性确定是否支持“页面设置”。 import flash.printing.PrintJob; var myPrintJob:PrintJob = new PrintJob(); if (myPrintJob.supportsPageSetupDialog) { myPrintJob.showPageSetupDialog(); } PrintJob.supportsPageSetupDialogstart2 选择性显示操作系统的“打印”对话框、开始后台处理,并可能修改 PrintJob 只读属性值。如果正在显示“页面设置”对话框,或者如果其他打印作业当前处于活动状态 IllegalOperationErrorflash.errors:IllegalOperationError如果用户在“打印”对话框出现时单击“确定”,或者未显示“打印”对话框而且未发生错误,则值为 true;如果用户单击“取消”或有错误发生,值为 falseBooleanuiOptionsflash.printing:PrintUIOptionsnull一个对象,指定在向用户显示的“打印”对话框中显示的选项。如果 showPrintDialog 参数是 false,则忽略此值。 showPrintDialogBooleantrue在开始打印作业之前是否向用户显示“打印”对话框 选择性显示操作系统的“打印”对话框、开始后台处理,并可能修改 PrintJob 只读属性值。

uiOptions 参数允许调用方控制在“打印”对话框中显示哪些选项。请参见 PrintUIOptions 类。如果 showPrintDialog 为 false,则忽略此参数。

即使当 showPrintDialogtrue 时,此方法的行为也可能与 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);
PrintJob.addPage()PrintJob.send()
start 显示操作系统的“打印”对话框并开始后台处理。在 AIR 2 或更高版本中,如果其他 PrintJob 当前处于活动状态 IllegalOperationErrorflash.errors:IllegalOperationError如果显示“打印”对话框时用户单击“确定”,则返回 true;如果用户单击“取消”或出现错误,则返回 falseBoolean 显示操作系统的“打印”对话框并开始后台处理。通过“打印”对话框,用户可更改打印设置。当 PrintJob.start() 方法成功返回时(用户单击“打印”对话框中的“确定”),将填充下列属性,从而显示用户选择的打印设置: 属性类型单位注释PrintJob.paperHeightNumber纸张整体高度。PrintJob.paperWidthNumber纸张整体宽度。PrintJob.pageHeightNumber页上实际可打印区域的高度;忽略用户设置的任何边距。PrintJob.pageWidthNumber页上实际可打印区域的宽度;忽略用户设置的任何边距。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()
PrintJob.addPage()PrintJob.send()
terminate 表示打印作业应终止,不发送。 表示打印作业应终止,不发送。当打印作业已通过调用 start()start2() 启动,但不适合将任何页面发送到打印机时,请使用此方法。通常,terminate() 仅用于从错误恢复。

在调用此方法后,PrintJob 实例可以重用。尽可能保留作业的打印设置以供后续使用。

active 表示打印作业当前是否处于活动状态。Boolean 表示打印作业当前是否处于活动状态。打印作业在下列任一情况下处于活动状态(属性值是 true):
  • 正在显示“页面设置”或“打印”对话框。
  • 已调用 start()start2() 方法(且返回值是 true),以及未调用 send()terminate() 方法。

如果此属性是 true 并且调用了 showPageSetupDialog()start()start2() 方法,则运行时将引发异常。

PrintJob.start()PrintJob.start2()PrintJob.send()PrintJob.terminate()
copies 打印系统打印的、随后将添加到打印作业中的任何页面的备份数。int 打印系统打印的、随后将添加到打印作业中的任何页面的备份数。此值是用户在操作系统的“打印”对话框中输入的备份数。如果“打印”对话框中没有显示备份数,或者没有向用户显示此对话框,则值为 1(除非应用程序代码对其进行了更改)。 firstPage 用户在操作系统的“打印”对话框中输入的范围内的第一页的页码。int 用户在操作系统的“打印”对话框中输入的范围内的第一页的页码。如果用户请求打印所有页面,或如果“打印”对话框中没有显示页面范围,或没有向用户显示“打印”对话框,则该属性为 0。 isColor 表示当前选择的打印机(采用当前打印设置)使用彩色 (true) 打印还是灰度 (false) 打印。Boolean 表示当前选择的打印机(采用当前打印设置)使用彩色 (true) 打印还是灰度 (false) 打印。

如果无法确定彩色或灰度值,则此值为 true

isSupported 表示当前平台上是否支持 PrintJob 类,支持为 true,不支持为 false。Boolean 表示当前平台上是否支持 PrintJob 类,支持为 true,不支持为 falsejobName 打印作业的名称或标题。Stringactive 属性为 true 时,如果代码尝试设置此属性。 IllegalOperationErrorflash.errors:IllegalOperationError<code>null</code> 打印作业的名称或标题。通常,操作系统将作业名称作为打印队列中的作业的标题,或者作为打印到文件中的作业的默认名称。

如果尚未调用 start()start2() 且尚未设置属性的值,则该属性的值为 null

对于您使用 PrintJob 实例执行的各个打印作业,请在调用 start()start2() 方法之前设置此属性。

lastPage 用户在操作系统的“打印”对话框中输入的范围内的最后一页的页码。int 用户在操作系统的“打印”对话框中输入的范围内的最后一页的页码。如果用户请求打印所有页面,或如果“打印”对话框中没有显示页面范围,或没有向用户显示“打印”对话框,则该属性为 0。 maxPixelsPerInch 所选打印机的物理分辨率,以每英寸像素为单位。Number 所选打印机的物理分辨率,以每英寸像素为单位。根据操作系统报告的当前打印设置计算该值。

如果不能确定分辨率,则该值是标准的默认值。此默认值在 Linux 上为 600 ppi,在 Mac OS 上为 360 ppi。在 Windows 上,打印机分辨率始终可以确定,所以无需使用默认值。

orientation 图像的打印方向。String 图像的打印方向。可接受值被定义为 PrintJobOrientation 类中的常量。

注意:对于 AIR 2 或更高版本,请在开始打印作业之前设置此属性,以在“页面设置”和“打印”对话框中设置默认方向。在打印作业正在进行时(调用 start()start2() 后)设置此属性,以设置作业中一系列页面的方向。

PrintJobOrientation 类
pageHeight 可在页面的实际可打印区域中居中放置的最大区域的高度,以点为单位。int 可在页面的实际可打印区域中居中放置的最大区域的高度,以点为单位。忽略用户设置的任何边距。仅当调用 PrintJob.start() 方法后,此属性才是可用的。

注意:对于 AIR 2 或更高版本,不推荐使用此属性。请改用 printableArea,此属性测量可打印区域(以小数点为单位)并精确描述中心外的可打印区域。

PrintJob.printableArea
pageWidth 可在页面的实际可打印区域中居中放置的最大区域的宽度,以点为单位。int 可在页面的实际可打印区域中居中放置的最大区域的宽度,以点为单位。忽略用户设置的任何边距。仅当调用 PrintJob.start() 方法后,此属性才是可用的。

注意:对于 AIR 2 或更高版本,不推荐使用此属性。请改用 printableArea,此属性测量可打印区域(以小数点为单位)并精确描述中心外的可打印区域。

PrintJob.printableArea
paperArea 打印机介质的范围,以点为单位。flash.geom:Rectangle 打印机介质的范围,以点为单位。此值使用的坐标系与后续 addPage() 调用使用的坐标系相同。 paperHeight 纸张总高度(以点为单位)。int 纸张总高度(以点为单位)。仅当调用 PrintJob.start() 方法后,此属性才是可用的。

注意:对于 AIR 2 或更高版本,不推荐使用此属性。请改用 paperArea,此属性可测量纸张尺寸(以小数点为单位)。

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

注意:对于 AIR 2 或更高版本,不推荐使用此属性。请改用 paperArea,此属性可测量纸张尺寸(以小数点为单位)。

PrintJob.paperArea
printableArea 打印机介质的可打印区域的范围,以点为单位。flash.geom:Rectangle 打印机介质的可打印区域的范围,以点为单位。此值使用的坐标系与后续 addPage() 调用使用的坐标系相同。 printer 获取或设置要用于当前打印作业的打印机。String 获取或设置要用于当前打印作业的打印机。已传递给 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() 失败之前,尝试更改该值。

printers 以 String 名称值的形式提供可用打印机的列表。 以 String 名称值的形式提供可用打印机的列表。列表不是预先计算好的,是在调用函数时生成的。如果没有可用的打印机或如果系统不支持打印,则该值为 null。如果系统支持打印但不能返回打印机列表,则该值是一个包含单个元素的矢量(其 length 属性为 1)。在这种情况下,如果不能确定当前打印机名称,则该单个元素将是实际的打印机名称或默认名称。 supportsPageSetupDialog 表示 Flash 运行时环境是否支持单独的“页面设置”对话框。Boolean 表示 Flash 运行时环境是否支持单独的“页面设置”对话框。如果该属性为 true,您可以调用 showPageSetupDialog() 方法以显示操作系统的“页面设置”对话框。 PrintJob.showPageSetupDialog()
PrintJobOrientation 该类可为所打印页面的图像位置提供 PrintJob.orientation 属性所使用的值。Object 该类可为所打印页面的图像位置提供 PrintJob.orientation 属性所使用的值。 PrintJob.orientationLANDSCAPE 横向(水平)的图像打印方向。landscapeString 横向(水平)的图像打印方向。此常数用于 PrintJob.orientation 属性。使用语法 PrintJobOrientation.LANDSCAPEPrintJob.orientationPORTRAITPORTRAIT 纵向(垂直)的图像打印方向。portraitString 纵向(垂直)的图像打印方向。此常数用于 PrintJob.orientation 属性。使用语法 PrintJobOrientation.PORTRAITPrintJob.orientationLANDSCAPEPaperSize 此类为 PrintJob.selectPaperSize() 方法的 paperSize 参数提供了可用值。Object 此类为 PrintJob.selectPaperSize() 方法的 paperSize 参数提供了可用值。每个常量表示用于打印页面的页面大小。

下表显示了每种页面类型的近似大小。此大小是近似值,因为不同的打印机驱动程序之间存在一些差异。例如,A4 纸张的宽度可以是 595.0、595.2、595.22 或 595.28 点,视驱动程序而定。

尺寸(以点为单位)A4595 x 842A5420 x 595A6297 x 420CHOUKEI3GOU340 x 666CHOUKEI4GOU298 x 666ENV_10297 x 684ENV_B5499 x 709ENV_C5459 x 649ENV_DL312 x 624ENV_MONARCH279 x 540ENV_PERSONAL261 x 468EXECUTIVE522 x 756FOLIO612 x 936JIS_B5516 x 729LEGAL612 x 1008LETTER612 x 792STATEMENT396 x 612
PrintJob.selectPaperSize()A4 A4 a4String A4 A5 A5 a5String A5 A6 A6 a6String A6 CHOUKEI3GOU 日文 choukei 3 gou(信封) choukei3gouString 日文 choukei 3 gou(信封) CHOUKEI4GOU 日文 choukei 4 gou(信封) choukei4gouString 日文 choukei 4 gou(信封) ENV_10 法律专用信封 env_10String 法律专用信封 ENV_B5 B5 信封 env_b5String B5 信封 ENV_C5 C5 信封 env_c5String C5 信封 ENV_DL DL 信封 env_dlString DL 信封 ENV_MONARCH 君主式信封 env_monarchString 君主式信封 ENV_PERSONAL 私人信封 env_personalString 私人信封 EXECUTIVE 执行尺寸 executiveString 执行尺寸 FOLIO 对开尺寸 folioString 对开尺寸 JIS_B5 日文 B5 jis_b5String 日文 B5 LEGAL 传统法律专用纸大小 legalString 传统法律专用纸大小 LETTER 传统法律专用纸大小 letterString 传统法律专用纸大小 STATEMENT 报告大小 statementString 报告大小