- Printing - Orientation and Resize
從AS3的PrintJob說明文件看來,功能似乎很簡潔,這裡提供自己處理orientation和border的方法,範例程式碼如下:
package {
import flash.display.Sprite;
import flash.printing.PrintJob;
import flash.printing.PrintJobOrientation;
import flash.events.MouseEvent;
import com.xinyu.button.TextButton;
public class PrintDemo extends Sprite {
var sp1:Sprite ;
public function PrintDemo() {
sp1 = new Sprite();
addChild(sp1);
var printBtn:TextButton = new TextButton(80,20,10,2,0xCCCCCC,"Print",0x000000);
sp1.addChild(printBtn);
printBtn.x = 10;
printBtn.y = 10;
printBtn.addEventListener(MouseEvent.CLICK, onPrintClicked);
}
private function onPrintClicked(event:MouseEvent):void {
var myPrintJob:PrintJob = new PrintJob();
var sp2:Sprite = new Sprite();
sp2.graphics.beginFill(0x000000);
sp2.graphics.drawRect(0,0,400,300);
sp2.graphics.endFill();
this.addChild(sp2);
sp2.addChild(sp1);
sp1.x += 50;
sp1.y += 50;
if (myPrintJob.start()) {
if(myPrintJob.orientation == PrintJobOrientation.PORTRAIT) {
sp2.rotation = 90;
}
try {
myPrintJob.addPage(sp2);
} catch (error:Error) {
}
myPrintJob.send();
}
this.removeChild(sp2);
this.addChild(sp1);
sp1.x -= 50;
sp1.y -= 50;
}
}
}
其中的TextButton是我自己的物件,你可以換成其他任何形式的按鈕物件。主要的技巧是我使用了兩個Sprite,分別為sp1:作為主要的顯示物件,sp2作為列印時的顯示物件。你可以看到當按鈕按下進入onPrintClicked()函式,我建立了sp2這個Sprite,並且繪製了400x300pixel大小的黑色底色(這裡使用黑色只是為了除錯時方便檢驗,實際列印過程中請使用白色),這樣做是避免Flash本身會最佳剪裁大小而讓我的sp2的寬長不能固定。
接著將sp1加入到sp2裡,並且設定sp1的x,y值,來達到有邊界的效果(當然你在設計過程中要處理好sp1的寬長,免得sp1在移動之後超出sp2的底色),開使printJob時由印表機的列印方向來決定是否旋轉sp2。
傳送完printJob之後,再將sp2從主場景移除,並將sp1加入回來。大致上多了這兩項的處理可以讓你的列印完善許多。
PS. 如果你要列印的物件有包含到文字,經旋轉後會無法正常列出,請使用上一篇的技巧,將字體轉成embedded,[Flash] Embedded Font。
No comments:
Post a Comment