ActionScript的PrintJob(列印工作)類別簡介
文∕趙英傑
Flash向量動畫高品質的一面可能很難從螢幕上體會,不過,倘若讀者曾經列印Flash網頁的內容,即可明瞭它的優點——Flash能從印表機輸出高品質的向量圖片,因此非常適合線上型錄、折價券、地圖和各種圖表使用。
若是直接使用瀏覽器的「列印」指令來列印包含Flash動畫的網頁,只能列印出Flash動畫的第一格影格畫面。Flash從Player 4.0開始支援print()函數,能讓程式設計人員指令指定要列印的影格和影片片段實體。
這項功能提供了非常大的版面設計彈性,以上一篇文章提供的列印「自製PSP保護膜」為例,用戶在網頁上看到的畫面如下:
但是列印出來的東西不是上圖的內容,而是隱藏在「工作區」裡的一個影片片段實體(亦即,真正的PSP包膜剪裁圖樣)。
print()函數適用於Flash Player 4.0(含)之後的所有播放器,但Flash Player 7.0(含)新增了功能更強大的PrintJob類別。「自製PSP保護膜」影片就是採用PrintJob類別執行列印,本文將簡介此類別的用法。
PrintJob類別具有三個方法,使用之前,必須先建立此類別的物件實體,如下所示:
var printDoc:PrintJob = new PrintJob();
建立好PrintJob類別實體之後,程式必須依序執行下列三個方法,才能完成列印工作:
- start():開啟用戶端的「列印」對話方塊,讓用戶選擇並設定印表機。當用戶按下「列印」鈕後,start()方法將傳回true;若按下「取消」鈕,start()將傳回false。
- addPage():指定要列印的內容。這個方法具有許多參數,但是只有一個是必要的:將被列印的影片片段實體名稱。
- send():把列印資料傳給印表機,開始列印。
「自製PSP保護膜」影片的程式碼全都放在actions圖層的第一格關鍵影格。列印對象是舞台下方工作區裡的“psp_mc”影片片段,舞台右下角的「列印」按鈕的實體名稱叫做“print_btn”。actions圖層第一格影格的頭兩行程式碼,分別儲存要列印的影片片段實體名稱,以及設定「列印」鈕的事件處理常式,如下:
var doc:MovieClip = psp_mc; print_btn.onRelease = startPrint;
底下是執行列印功能的自訂函數startPrint():
function startPrint():Void { var printDoc:PrintJob = new PrintJob(); // 當用戶按下「列印」對話方塊中的「列印」鈕時, // start()方法將傳回true if (printDoc.start()) { // 列印對象是doc變數參照的影片片段實體 printDoc.addPage(doc); printDoc.send(); } // 列印完畢後,刪除PrintJob物件 delete printDoc; }
讀者可按此連結下載本文的Flash原始檔(請使用Flash 8軟體開啟)。
看了您的文章, 覺得對於 Flash 的列印有了更進一步的認識。不過仍然還有一些問題想要了解。
如果我的 Flash 是 300 * 200, 在設定列印 addPage 時, 大小是否會受 300 * 200 限制? 還是如果我那塊是 800 * 1200 也可以全部印出來?
謝謝!!
可以。本文的範例檔裡的列印對象尺寸,就比影片舞台還要大。
請問要如何讓 「列印」對話方塊 不見 , 我找了很多資料 , 可是好像沒有人有跟我一樣的問題 .
你是指:按下列印鈕之後,直接從用戶預設的印表機列印出文件嗎?如果是這樣,好像不太合乎常理。
你好, 看過以上範例之後, 有此概念, 如果我想將影片在場景見到的, 當按print 時, 能夠將隱藏的影片片斷結合一起印出, 能否做到呢, 意思是
在主場景見到的影片, 是看不到有一個浮水印logo的, 當列印時便將那浮水印加上影片畫面一齊印出, 這是希望在看動畫時沒有浮水印影響畫面美觀, 但印出時便有個類似 copyright 的效果在紙上, 如何寫 as 語法呢, 可以給我例子嗎, 謝謝!
謝謝你的分享:razz:
請問~~
若我只想印A4大小,但原圖超過該怎麼修改呢? 🙄
請直接縮小列印圖 😛
have fun,
jeffrey
不好意思,想請問一下
我將AI的圖貼到flash製成影片片段
但印出來背景都會是黑色,設定過白色背景也沒有用
不知道有沒有方法解決?? 😀
你的圖片有使用特殊的濾鏡或遮片色等效果嗎?建議先在Flash裡面使用其他圖片替代,看看是否能正常輸出。
good luck!
jeffrey