Главная / Action Script 3
Пакетflash.printing
Классpublic class PrintJob
НаследованиеPrintJob Inheritance EventDispatcher Inheritance Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Класс PrintJob позволяет создавать содержимое и распечатывать его на одной или нескольких страницах. Этот класс позволяет прорисовывать для пользователя содержимое, которое видимо, отображается динамически или находится вне экрана, открывать для пользователей одно диалоговое окно "Печать" и печатать немасштабированный документ с пропорциями, соответствующими пропорциям содержимого. Эта возможность особенно полезна для прорисовки и печати динамического содержимого, например содержимого баз данных и динамического текста.

Используйте конструктор PrintJob() для создания задания печати.

Кроме того, благодаря свойствам, заполняемым PrintJob.start(), для документа могут считываться параметры настройки принтера, например высота страницы, ее ширина и ориентация изображения, и можно настроить в документе динамическое форматирование содержимого Flash в соответствии с параметрами принтера. Свойства макета пользователя, заполняемые PrintJob.start(), открыты только для чтения и не могут быть изменены в Flash Player.

Примечание. ActionScript 3.0 не ограничивает объект PrintJob одним кадром (как это было в предыдущих версиях программы ActionScript). Однако, поскольку операционная система отображает информацию о состоянии печати пользователю, после того как он нажал кнопку "ОК" в диалоговом окне "Печать", необходимо как можно быстрее вызвать методы PrintJob.addPage() и PrintJob.send(), чтобы отправить страницы в диспетчер очереди печати. Задержка при обращении к кадру, содержащему вызов PrintJob.send(), приведет к задержке процесса печати.

Кроме того, для следующих интервалов применяется 15 секундное ограничение задержки сценария:

Если любой из вышеуказанных интервалов длится более 15 секунд, следующий вызов метода PrintJob.start() для экземпляра PrintJob возвращает значение false, а следующее обращение к методу PrintJob.addPage() для этого экземпляра PrintJob вызывает в проигрывателе Flash Player исключение при выполнении.

Посмотреть примеры

См. также

Основные сведения о печати
Введение в печать
Печать страницы


Общедоступные свойства
 СвойствоОпределено
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  orientation : String
[только для чтения] Ориентация изображения при печати.
PrintJob
  pageHeight : int
[только для чтения] Высота фактически печатаемой области на странице (в пунктах).
PrintJob
  pageWidth : int
[только для чтения] Ширина фактически печатаемой области на странице (в пунктах).
PrintJob
  paperHeight : int
[только для чтения] Общая высота бумаги (в пунктах).
PrintJob
  paperWidth : int
[только для чтения] Общая ширина бумаги (в пунктах).
PrintJob
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
Общедоступные методы
 МетодОпределено
  
Создает объект PrintJob, который можно использовать для печати одной или нескольких страниц.
PrintJob
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события в объекте EventDispatcher, в результате чего прослушиватель будет получать уведомления о событиях.
EventDispatcher
  
addPage(sprite:Sprite, printArea:Rectangle = null, options:PrintJobOptions = null, frameNum:int = 0):void
Отправляет заданный объект Sprite в диспетчер очереди печати принтера в виде одной страницы.
PrintJob
 Inherited
Передает событие в поток событий.
EventDispatcher
 Inherited
Проверяет наличие у объекта EventDispatcher прослушивателей событий, которые зарегистрированы для получения уведомлений о событиях определенного типа.
EventDispatcher
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Удаляет прослушиватель из объекта EventDispatcher.
EventDispatcher
  
Отправляет страницы в очереди печати на принтер после успешного выполнения методов PrintJob.start() и PrintJob.addPage().
PrintJob
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
  
Открывает диалоговое окно "Печать" операционной системы, запускает подкачку и устанавливает доступные только для чтения значения свойств PrintJob.
PrintJob
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
 Inherited
Проверяет, зарегистрирован ли прослушиватель событий в объекте EventDispatcher или в любом из его предков для получения уведомлений о событиях определенного типа.
EventDispatcher
События
 Событие Сводка Определено
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player перемещается в фокус операционной системы и становится активным.EventDispatcher
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player покидает фокус операционной системы и становится неактивным.EventDispatcher
Сведения о свойстве
orientationсвойство
orientation:String  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9.

Ориентация изображения при печати. Это свойство является значением класса PrintJobOrientation. Это свойство доступно только после того, как был вызван метод PrintJob.start().



Реализация
    public function get orientation():String

См. также

pageHeightсвойство 
pageHeight:int  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9.

Высота фактически печатаемой области на странице (в пунктах). Любые границы, установленные пользователем, игнорируются. Это свойство доступно только после того, как был вызван метод PrintJob.start().



Реализация
    public function get pageHeight():int

См. также

pageWidthсвойство 
pageWidth:int  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9.

Ширина фактически печатаемой области на странице (в пунктах). Любые границы, установленные пользователем, игнорируются. Это свойство доступно только после того, как был вызван метод PrintJob.start().



Реализация
    public function get pageWidth():int

См. также

paperHeightсвойство 
paperHeight:int  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9.

Общая высота бумаги (в пунктах). Это свойство доступно только после того, как был вызван метод PrintJob.start().



Реализация
    public function get paperHeight():int
paperWidthсвойство 
paperWidth:int  [только для чтения]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9.

Общая ширина бумаги (в пунктах). Это свойство доступно только после того, как был вызван метод PrintJob.start().



Реализация
    public function get paperWidth():int
Сведения о конструкторе
PrintJob()Конструктор
public function PrintJob()

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Создает объект PrintJob, который можно использовать для печати одной или нескольких страниц. После создания объекта PrintJob для отправки задания печати на принтер необходимо использовать (в указанном порядке) методы PrintJob.start(), PrintJob.addPage(), а затем PrintJob.send().

Например, можно заменить текст-заполнитель [params] для вызовов метода my_pj.addPage() пользовательскими параметрами, как показано в следующем программном коде.

// create PrintJob object var my_pj:PrintJob = new PrintJob(); // display Print dialog box, but only initiate the print job // if start returns successfully. if (my_pj.start()) { // add specified page to print job // repeat once for each page to be printed try { my_pj.addPage([params]); } catch(e:Error) { // handle error } try { my_pj.addPage([params]); } catch(e:Error) { // handle error } // send pages from the spooler to the printer, but only if one or more // calls to addPage() was successful. You should always check for successful // calls to start() and addPage() before calling send(). my_pj.send(); }

Нельзя создать второй объект PrintJob, если уже есть один такой активный объект. Если второй объект PrintJob создается (вызовом метода new PrintJob()), когда активен первый объект PrintJob, второй объект создан не будет. Поэтому можно проверить значение my_pj, прежде чем создавать второй объект PrintJob.


Выдает
IllegalOperationError — Если еще активен другой объект PrintJob, выдается исключение.

См. также

Сведения о методе
addPage()метод
public function addPage(sprite:Sprite, printArea:Rectangle = null, options:PrintJobOptions = null, frameNum:int = 0):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9.

Отправляет заданный объект Sprite в диспетчер очереди печати принтера в виде одной страницы. Перед использованием этого метода необходимо создать объект PrintJob, а затем применить метод PrintJob.start(). Затем, после вызова метода PrintJob.addPage() один или несколько раз для задания печати, для передачи страниц в диспетчере очереди печати на принтер применяется метод PrintJob.send(). Говоря другими словами, после создания объекта PrintJob для отправки задания печати на принтер необходимо использовать (в указанном порядке) методы PrintJob.start(), PrintJob.addPage(), а затем PrintJob.send(). Метод PrintJob.addPage() можно использовать несколько раз после одного вызова метода PrintJob.start(), чтобы выполнить печать нескольких страниц одновременно.

Если метод PrintJob.addPage() вызывает исключение в проигрывателе Flash Player (например, если не вызван метод PrintJob.start() или пользователь отменил задание печати), любой последующий вызов PrintJob.addPage() завершится ошибкой. Однако, если предыдущие вызовы метода PrintJob.addPage() были успешными, завершающая команда PrintJob.send() отправит успешно помещенные в очередь диспетчера печати страницы на принтер.

Если заданию печати требуется более 15 секунд для выполнения операции PrintJob.addPage(), то проигрыватель Flash Player вызовет исключение при следующем обращении к методу Print.addPage().

Если передается значение для параметра printArea, то координаты x и y объекта printArea устанавливаются для верхнего левого угла (координаты 0,0) области печати страницы. Область печати описывается доступными только для чтения свойствами pageHeight и pageWidth, устанавливаемыми методом PrintJob.start(). Поскольку печатаемые данные выравниваются по верхнему левому углу области печати страницы, то когда область, определенная параметром printArea больше, чем область печати страницы, печатаемые данные обрезаются по правой или по левой границе (или по обеим сразу) области, заданной параметром printArea.

Если требуется отмасштабировать объект Sprite перед тем как распечатывать его, установите свойства масштабирования (см. flash.display.DisplayObject.scaleX и flash.display.DisplayObject.scaleY) прежде чем вызывать этот метод, а затем верните их в исходное состояние после выполнения печати. Масштаб объекта Sprite не связан с параметром printArea. Таким образом, если указывается область печати 50 x 50 пикселей, распечатывается 2500 пикселей. Если объект Sprite масштабируется, распечатываются те же 2500 пикселей, но объект Sprite при этом печатается в отмасштабированном размере.

Функция печати в проигрывателе Flash Player может работать с поддерживающими и неподдерживающими PostScript принтерами. В принтерах, неподдерживающих PostScript, происходит преобразование векторных изображений в растровые.

Параметры

sprite:Sprite — Имя экземпляра объекта Sprite для печати.
 
printArea:Rectangle (default = null) — Прямоугольный объект, указывающий область для печати.

Значения ширины и высоты прямоугольника задаются в пикселях. Принтер использует точки в качестве единиц измерения для печати. Точки имеют фиксированный физический размер (1/72 дюйма), но размер пикселя на экране зависит от разрешения конкретного экрана. Поэтому коэффициент преобразования между пикселями и точками зависит от параметров принтера и масштабирования объекта Sprite. Немасштабированный объект Sprite, имеющий ширину 72 пикселя, будет распечатываться с шириной 1 дюйм, при этом одна точка будет равна одному пикселю, независимо от разрешения экрана.

Можно использовать следующие соответствия для преобразования дюймов или сантиметров в твипы или точки (твип равен 1/20 части точки):

  • 1 точка = 1/72 дюйма = 20 твипов
  • 1 дюйм = 72 пунктам = 1440 твипам
  • 1 см = 567 твипам

Если параметр printArea пропущен или неверно передан, распечатывается вся область объектаsprite.

Если не требуется указывать значение для параметра printArea, но необходимо значение для параметров options или frameNum, укажите null в качестве значения для printArea.

 
options:PrintJobOptions (default = null) — Дополнительный параметр, который указывает, нужно ли выполнять печать в векторном или растровом формате. По умолчанию установлено значение null, которое соответствует запросу на печать в векторном формате. Чтобы распечатать объект sprite в растровом формате, установите для свойства printAsBitmap объекта rintJobOptions значение true. Не забывайте о следующих рекомендациях, когда определяете, устанавливать ли для свойства printAsBitmap значение true.
  • Если распечатываемое содержимое содержит растровое изображение, установите для свойства printAsBitmap значение true, чтобы можно было включить альфа-прозрачность и какие-либо цветовые эффекты.
  • Если в содержимом нет растровых изображений, пропустите данный параметр, чтобы распечатать содержимое в высококачественном векторном формате.

Если параметр optionsпропущен или передан неверно, используется векторная печать. Если не требуется указывать значение для параметра options, но необходимо значение для параметра frameNum, укажите null в качестве значения для options.

 
frameNum:int (default = 0)


Выдает
Error — Выдается исключение, если не был вызван метод PrintJob.start() или пользователь отменил задание печати

См. также

send()метод 
public function send():void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9.

Отправляет страницы в очереди печати на принтер после успешного выполнения методов PrintJob.start() и PrintJob.addPage(). Невозможны успешные вызовы метода PrintJob.send(), если вызов PrintJob.start() завершился с ошибкой или возникло исключение при вызове PrintJob.addpage(). Необходимо проверить, что при вызове метода PrintJob.start() возвращается значение true и перехватить любое исключение PrintJob.addpage(), прежде чем вызывать метод PrintJob.send(). Например,

  var my_pj:PrintJob = new PrintJob();
    if (my_pj.start()) {
    try {
      my_pj.addPage([params]);
   }
    catch(e:Error) {
      // handle error 
   }
      my_pj.send();
  }
  

См. также

start()метод 
public function start():Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  9., 9.

Открывает диалоговое окно "Печать" операционной системы, запускает подкачку и устанавливает доступные только для чтения значения свойств PrintJob. Диалоговое окно "Печать" позволяет пользователю изменять параметры печати. Если метод PrintJob.start() успешно выполняется (пользователь нажимает кнопку "ОК" в диалоговом окне "Печать"), то следующие, доступные только для чтения свойства заполняются значениями, соответствующими текущим параметрам печати пользователя.

СвойствоТипЕдиницыПримечания
PrintJob.paperHeightNumberПунктыОбщая высота страницы.
PrintJob.paperWidthNumberПунктыОбщая ширина страницы.
PrintJob.pageHeightNumberПунктыВысота фактически печатаемой области на странице; все установленные пользователем границы игнорируются.
PrintJob.pageWidthNumberПунктыШирина фактически печатаемой области на странице; любые установленные пользователем границы игнорируются.
PrintJob.orientationStringportrait (flash.printing.PrintJobOrientation.PORTRAIT) или landscape (flash.printing.PrintJobOrientation.LANDSCAPE).

Примечание. Если пользователь закрывает диалоговое окно "Печать", эти свойства не заполняются.

После того как пользователь нажмет кнопку "ОК" в диалоговом окне "Печать", проигрыватель начинает отправлять задание печати в очередь диспетчера печати операционной системы. Поскольку операционная система затем начинает отображать пользователю информацию о выполнении печати, необходимо как можно быстрее вызвать методы PrintJob.addPage() и PrintJob.send(), чтобы отправить страницы в диспетчер очереди печати. Можно использовать доступные только для чтения свойства высоты, ширины и ориентации страницы, которые этот метод подставляет при форматировании печатаемой страницы.

Проверьте, возвращает ли метод значение true (если пользователь нажмет кнопку "ОК" в диалоговом окне "Печать" операционной системы) перед последующим вызовом одного из методов PrintJob.addPage() и PrintJob.send():

  var my_pj:PrintJob = new PrintJob();
     if(my_pj.start()) {
       // addPage() and send() statements here
     }
  

Для заданного экземпляра задания печати, если какой-либо из следующих интервалов длится дольше 15 секунд, при следующем вызове PrintJob.start() будет возвращаться значение false:

Возвращает
Boolean — Устанавливается значение true, если пользователь нажал кнопку "ОК", когда открылось диалоговое окно "Печать"; а значение false, если была нажата кнопка "Отмена".

См. также

Примеры Как пользоваться примерами
PrintJobExample.as

В следующем примере класс PrintJobExample используется для создания маленького документа и последующей отправки его на принтер. Это можно сделать, выполнив следующие действия:
  1. Объявляются две переменные типа Sprite с названиями sheet1 и sheet2.
  2. Вызывается метод init(), который назначает новый экземпляр Sprite обеим переменным sheet1 и sheet2, а затем вызывается метод createSheet().
  3. Метод createSheet() выполняет следующие действия:
  4. Выполняется обратный переход в конструктор, а затем вызывается разрешенный (незакомментированный) метод печати. Поскольку методы очень похожи, далее описан только один из них printOnePerPage().
  5. Метод printOnePerPage() выполняет следующие действия:
  6. Метод draw() вызывается, когда необходимо изменить размеры двух объектов Sprite для размещения в рабочей области или изменения положения sheet2, например, поместив его справа от sheet1.

Примечание. Конструктор настроен таким образом, что можно выбрать один из трех методов печати (печать одной страницы на лист, двух страниц на лист или печать в верхней половине листа) в зависимости от предпочтения. Этот пример не будет работать правильно до тех пор, пока два метода печати не будут отключены с помощью комментариев в программном коде. Пример настроен таким образом, что будет вызываться метод printOnePerPage().

package {
    import flash.printing.PrintJob;
    import flash.printing.PrintJobOrientation;
    import flash.display.Stage;
    import flash.display.Sprite;
    import flash.text.TextField;
    import flash.geom.Rectangle;
       
    public class PrintJobExample extends Sprite {
        private var sheet1:Sprite;
        private var sheet2:Sprite;
           
        public function PrintJobExample() {
            init();
            printOnePerPage();
//            printTwoPerPage();
//            printTopHalf();
            draw();
        }
        
        private function init():void {
            sheet1 = new Sprite();
            createSheet(sheet1, "Once upon a time...", {x:10, y:50, width:80, height:130});

            sheet2 = new Sprite();
            createSheet(sheet2, "There was a great story to tell, and it ended quickly.\n\nThe end.", null);
        }
        
        private function createSheet(sheet:Sprite, str:String, imgValue:Object):void {
            sheet.graphics.beginFill(0xEEEEEE);
            sheet.graphics.lineStyle(1, 0x000000);
            sheet.graphics.drawRect(0, 0, 100, 200);
            sheet.graphics.endFill();
            
            var txt:TextField = new TextField();
            txt.height = 200;
            txt.width = 100;
            txt.wordWrap = true;
            txt.text = str;
            
            if(imgValue != null) {
                var img:Sprite = new Sprite();
                img.graphics.beginFill(0xFFFFFF);
                img.graphics.drawRect(imgValue.x, imgValue.y, imgValue.width, imgValue.height);
                img.graphics.endFill();
                sheet.addChild(img);
            }
            sheet.addChild(txt);
        }
        
        private function printOnePerPage():void {
            var pj:PrintJob = new PrintJob();
            var pagesToPrint:uint = 0;
            if(pj.start()) {                
                if(pj.orientation == PrintJobOrientation.LANDSCAPE) {    
                    throw new Error("Without embedding fonts you must print one sheet per page with an orientation of portrait.");
                }
                
                sheet1.height = pj.pageHeight;
                sheet1.width = pj.pageWidth;
                sheet2.height = pj.pageHeight;
                sheet2.width = pj.pageWidth;

                try {
                    pj.addPage(sheet1);
                    pagesToPrint++;
                }
                catch(e:Error) {
                    // do nothing
                }

                try {
                    pj.addPage(sheet2);
                    pagesToPrint++;
                }
                catch(e:Error) {
                    // do nothing
                }

                if(pagesToPrint > 0) {
                    pj.send();
                }
            }
        }
        
        private function printTwoPerPage():void {
            var pj:PrintJob = new PrintJob();
            var pagesToPrint:uint = 0;
            if(pj.start()) {                
                if(pj.orientation == PrintJobOrientation.PORTRAIT) {
                    throw new Error("Without embedding fonts you must print two sheets per page with an orientation of landscape.");
                }
                
                sheet1.height = pj.pageHeight;
                sheet1.width = pj.pageWidth/2;
                sheet2.height = pj.pageHeight;
                sheet2.width = pj.pageWidth/2;

                var sheets:Sprite = new Sprite();
                sheets.addChild(sheet1);
                sheets.addChild(sheet2);
                sheets.getChildAt(1).x = sheets.getChildAt(0).width;
                try {
                    pj.addPage(sheets);
                    pagesToPrint++;
                }
                catch(e:Error) {
                    // do nothing
                }

                if(pagesToPrint > 0) {
                    pj.send();
                }
            }
        }

        private function printTopHalf():void {
            var pj:PrintJob = new PrintJob();
            var pagesToPrint:uint = 0;
            if(pj.start()) {                
                if(pj.orientation == PrintJobOrientation.PORTRAIT) {
                    throw new Error("Without embedding fonts you must print the top half with an orientation of landscape.");
                }
                
                sheet1.height = pj.pageHeight;
                sheet1.width = pj.pageWidth/2;
                sheet2.height = pj.pageHeight;
                sheet2.width = pj.pageWidth/2;

                var sheets:Sprite = new Sprite();
                sheets.addChild(sheet1);
                sheets.addChild(sheet2);
                sheets.getChildAt(1).x = sheets.getChildAt(0).width;
                try {
                    pj.addPage(sheets, new Rectangle(0, 0, sheets.width, sheets.height/2));
                    pagesToPrint++;
                }
                catch(e:Error) {
                    // do nothing
                }

                if(pagesToPrint > 0) {
                    pj.send();
                }
            }
        }


        private function draw():void {
            var sheetWidth:Number = this.stage.stageWidth/2;
            var sheetHeight:Number = this.stage.stageHeight;
            
            addChild(sheet1);
            sheet1.width = sheetWidth;
            sheet1.height = sheetHeight;
            
            addChild(sheet2);
            sheet2.width = sheetWidth;
            sheet2.height = sheetHeight;
            sheet2.x = sheet1.width;
        }        
    }
}