Пример печати: масштабирование, обрезка и динамическая настройка

Flash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий

В некоторых случаях может потребоваться изменить размер (или другие свойства) экранного объекта при печати, чтобы компенсировать различия между тем, как он отображается на экране и печатается на бумаге. Настраивая свойства экранного объекта перед печатью (например, свойства scaleX и scaleY ), помните, что если отмасштабированный объект становится больше прямоугольника, определенного для области печати, он обрезается. Кроме того, после печати страниц, вероятно, потребуется восстановить исходные свойства.

Следующий код масштабирует размеры экранного объекта txt (но не зеленого фонового окна), в результате чего текстовое поле обрезается по размерам заданного прямоугольника. После печати размер текстового поля восстанавливается для отображения на экране. Если пользователь отменит задание печати через диалоговое окно «Печать» операционной системы, содержимое в среде выполнения Flash изменится, чтобы сообщить пользователю о том, что задание отменено.

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; 
        } 
    } 
}