设置大小、缩放和方向

Flash Player 9 和更高版本,Adobe AIR 1.0 和更高版本

打印页面 一节详细介绍基本打印作业的步骤,在基本打印作业中,输出直接反映了指定的 Sprite 的屏幕大小和位置的打印效果。然而,打印机使用不同的分辨率进行打印,并且可以具有对打印 sprite 的外观有不利影响的设置。

Flash 运行时可以读取操作系统的打印设置,但是请注意这些属性是只读的:虽然您可以响应它们的值,但无法对它们进行设置。例如,您可以查明打印机的页面大小设置,并调整内容以适合该大小。您还可以确定打印机的边距设置和页面方向。要响应打印机设置,请指定打印区域,调整屏幕的分辨率和打印机的点测量之间的差异,或者转换您的内容以适合用户打印机的大小或方向设置。

为打印区域使用矩形

使用 PrintJob.addPage() 方法可以指定要打印的 sprite 的区域。第二个参数 printArea 为 Rectangle 对象的形式。您可以选择三种方法来提供该参数的值:

  • 创建一个具有特定属性的 Rectangle 对象,然后将该矩形用于 addPage() 调用,如下例所示:

    private var rect1:Rectangle = new Rectangle(0, 0, 400, 200); 
    myPrintJob.addPage(sheet, rect1);
  • 如果您尚未指定 Rectangle 对象,则可以在该调用本身内指定,如下面的示例所示:

    myPrintJob.addPage(sheet, new Rectangle(0, 0, 100, 100));
  • 如果您打算为 addPage() 调用中的第三个参数提供值,但不想指定矩形,则可以对第二个参数使用 null ,如下所示:

    myPrintJob.addPage(sheet, null, options);

比较点和像素

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

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

  • 1 点 = 1/72 英寸 = 20 缇

  • 1 英寸 = 72 点 = 1440 缇

  • 1 厘米 = 567 缇

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

缩放

如果要在打印前对 Sprite 对象进行缩放,请在调用 PrintJob.addPage() 方法之前设置缩放属性(请参阅 处理大小和缩放对象 ),并在打印后将这些属性设置回原始值。Sprite 对象的缩放与 printArea 属性无关。也就是说,如果指定一个 50 x 50 个像素的打印区域,则会打印 2500 个像素。如果对 Sprite 对象进行缩放,则同样会打印 2500 个像素,但按缩放后的大小打印 Sprite 对象。

有关示例,请参阅 打印示例:缩放、裁剪和响应

横向或纵向打印

由于 Flash Player 和 AIR 可以检测方向设置,因此,您可以在 ActionScript 中构建逻辑来调整内容大小或旋转以响应打印机设置,如下面的示例所示:

if (myPrintJob.orientation == PrintJobOrientation.LANDSCAPE) 
{ 
    mySprite.rotation = 90; 
}
注: 如果您计划读取纸张上内容方向的系统设置,请记得导入 PrintJobOrientation 类 。PrintJobOrientation 类提供了定义页面上的内容方向的常量值。使用以下语句导入该类:
import flash.printing.PrintJobOrientation;

响应页面高度和宽度

使用类似于处理打印机方向设置的策略,可以读取页面高度和宽度设置,并通过将某些逻辑嵌入 if 语句中来响应这些设置。下面的代码显示了一个示例:

if (mySprite.height > myPrintJob.pageHeight) 
{ 
    mySprite.scaleY = .75; 
}

此外,还可以通过比较页面尺寸和纸张尺寸来确定页面的边距设置,如下面的示例所示:

margin_height = (myPrintJob.paperHeight - myPrintJob.pageHeight) / 2; 
margin_width = (myPrintJob.paperWidth - myPrintJob.pageWidth) / 2;