| 套件 | 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 3.0 沒有將 PrintJob 物件限制在單一影格 (如先前版本的 ActionScript 作法)。 不過,由於作業系統會在使用者按一下「列印」對話方塊中的「確定」按鈕之後,對使用者顯示列印狀態資訊,所以您應該儘快呼叫 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 [靜態] [唯讀]
指出目前的平台支援 (true) 或不支援 (false) PrintJob 類別。 | 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 傳回的字串,應該和在 Array 中由 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 物件仍在作用中時,藉由呼叫 new PrintJob() 建立第二個 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 矩形的 x 和 y 座標便會對應到頁面中可列印區域的左上角 (0, 0 座標)。唯讀屬性 pageHeight 和 pageWidth 會描述 start() 設定的可列印區域。由於列印結果會對齊頁面中可列印區域的左上角,所以當 printArea 中定義的區域大於頁面上的可列印區域時,列印結果便會裁切 printArea 所定義之區域的右側或底部 (或在兩處同時裁切)。 在 Flash Professional,如果您沒有傳遞 printArea 的值,而且「舞台」大於可列印區域,則會發生相同類型的裁切結果。在 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,會列印為一英吋的寬度,無論螢幕解析度為何,每一點都會等於一個像素。 您可以使用下列等式,將英吋或公分轉換成崔普 (twip) 或點 (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 | Points | 整頁高度。 |
PrintJob.paperWidth | Number | Points | 整頁寬度。 |
PrintJob.pageHeight | Number | Points | 頁面上實際可列印區域的高度;會忽略所有使用者設定的邊界。 |
PrintJob.pageWidth | Number | Points | 頁面上實際可列印區域的寬度;會忽略所有使用者設定的邊界。 |
PrintJob.orientation | 字串 | "portrait" (flash.printing.PrintJobOrientation.PORTRAIT) 或 "landscape" (flash.printing.PrintJobOrientation.LANDSCAPE)。 |
注意:如果使用者取消「列印」對話方塊,就不會填入這些屬性。
使用者在「列印」對話方塊中按一下「確定」以後,播放程式就會開始將多工緩衝處理的列印工作送到作業系統。 由於作業系統接著會對使用者顯示關於列印進度的資訊,所以您應該盡快呼叫 PrintJob.addPage() 與 PrintJob.send(),將這些頁面傳送至多工緩衝處理區域。 您可以使用此方法所填入的唯讀高度、寬度與方向屬性,來設定列印輸出之格式。
對 PrintJob.addPage() 與 PrintJob.send() 進行任何後續呼叫之前,請先測試並查看此方法是否傳回 true (當使用者在作業系統的「列印」對話方塊中按一下「確定」時):
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 建立一份小文件,然後將文件傳送至印表機。 這是透過下列步驟完成:
- 宣告兩個名為
sheet1與sheet2的 Sprite 類型變數。 - 呼叫
init(),為sheet1和sheet2各指定新的 Sprite 實體,然後使用不同的引數呼叫createSheet()。 createSheet()會進行下列工作:- 使用傳入的 Sprite 物件,在 x = 0, y = 0 的位置繪製 100 (寬) x 200 (高) 像素的矩形,其背景為淺灰色,並具有寬度為一個像素的黑色邊框。
- 使用和 Sprite 相同的尺寸、將 wordWrap 屬性設定為
true並將要做為引數傳遞給createSheet()的文字屬性設定為 String,以建立新的 TextField 物件txt。 - 如果傳入的 Object 引數不是 null,則建立新的 Sprite 實體
img,使用傳入 Object 的座標和尺寸屬性繪製一個白色矩形。 然後再將此白色矩形加入 Sprite 物件的顯示清單中 (藉由使用addChild())。 txt將 TextField 加入 Sprite 物件的顯示清單中 (藉由使用addChild())。
- 回到建構函式中,呼叫已啟用 (未標示註解) 的列印方法。 由於方法都非常相似,因此以下只說明
printOnePerPage()。 printOnePerPage()會進行下列工作:- 宣告名為
pj的新 PrintJob 物件,並將pagesToPrint宣告為 uint。 - 開啟作業系統原本的列印對話方塊,並等待使用者按一下
OK。 - 檢查方向,如果選取的是「橫向」,便會擲回錯誤並結束。
- 設定
sheet1與sheet2的頁面高度及寬度。 - 使用
addPage()將sheet1與sheet2傳送到列印多工緩衝處理區域。 - 如果要列印的頁數大於 0,便會列印多工緩衝處理區域中的所有頁面。
- 宣告名為
- 呼叫
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, 03:47 PM Z
隱藏繼承公用屬性
顯示繼承公用屬性