套件 | 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