Przykład z drukowaniem: skalowanie, obcinanie i reagowanie

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

W niektórych sytuacjach wskazane jest dopasowanie rozmiaru (lub innych właściwości) obiektu drukowanego obiektu wyświetlanego w celu skompensowania różnicy między jego wyglądem na ekranie a wyglądem na papierze. W wypadku modyfikowania właściwości obiektu wyświetlanego przed wydrukowaniem go (np. właściwości scaleX i scaleY ) należy pamiętać, że jeśli obiekt w wyniku przeskalowania stanie się większy od prostokąta definiującego obszar drukowania, to zostanie obcięty. Ponadto zwykle wskazane jest przywrócenie pierwotnych wartości właściwości po wydrukowaniu strony.

Poniższy kod skaluje obiekt wyświetlany txt (ale nie zielone pole tła), ale ostatecznie pole tekstowe jest obcinane do wymiarów określonego prostokąta. Po wydrukowaniu przywracany jest właściwy (ekranowy) rozmiar pola tekstowego. Jeśli użytkownik anuluje drukowanie w oknie dialogowym Drukowanie systemu operacyjnego, treść w środowisku wykonawczym Flash zostanie zmodyfikowana w celu poinformowania użytkownika o anulowaniu zadania.

package 
{ 
    import flash.printing.PrintJob; 
    import flash.display.Sprite; 
    import flash.text.TextField; 
    import flash.display.Stage; 
    import flash.geom.Rectangle; 
     
    public class PrintScaleExample extends Sprite 
    { 
        private var bg:Sprite; 
        private var txt:TextField; 
 
        public function PrintScaleExample():void 
        { 
            init(); 
            draw(); 
            printPage(); 
        } 
         
        private function printPage():void 
        { 
            var pj:PrintJob = new PrintJob(); 
            txt.scaleX = 3; 
            txt.scaleY = 2; 
            if (pj.start()) 
            { 
                trace(">> pj.orientation: " + pj.orientation); 
                trace(">> pj.pageWidth: " + pj.pageWidth); 
                trace(">> pj.pageHeight: " + pj.pageHeight); 
                trace(">> pj.paperWidth: " + pj.paperWidth); 
                trace(">> pj.paperHeight: " + pj.paperHeight);     
 
                try 
                { 
                    pj.addPage(this, new Rectangle(0, 0, 100, 100)); 
                } 
                catch (error:Error) 
                { 
                    // Do nothing. 
                } 
                pj.send(); 
            } 
            else 
            { 
                txt.text = "Print job canceled"; 
            } 
            // Reset the txt scale properties. 
            txt.scaleX = 1; 
            txt.scaleY = 1; 
        } 
         
        private function init():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 draw():void 
        { 
            addChild(bg); 
            addChild(txt); 
            txt.x = 50; 
            txt.y = 50; 
        } 
    } 
}