設定大小、縮放與列印方向

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,將會列印為一英吋的寬度,無論螢幕解析度為何,每一點都會等於一個像素。

您可以使用下列等式,將英吋或公分轉換成崔普 (twip) 或點 (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;