[Flash] Printing - Orientation and Resize

  • 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

Orange - data analysis tool

Installation pip install orange3 Run orange python -m Orange.canvas