Настройка размера, масштаба и ориентации страницы

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

В разделе Печать страницы подробно описываются действия для выполнения базового задания печати, где вывод является непосредственным печатным эквивалентом размера экрана и позиции заданного спрайта. Однако принтеры имеют другое разрешение, и их настройки могут отрицательно сказаться на внешнем виде напечатанного спрайта.

Среда выполнения Flash может считывать параметры печати операционной системы, но эти свойства доступны только для чтения: их можно использовать в ходе настройки печати, но нельзя изменять. Например, можно узнать настройку принтера для размера страницы и соответствующим образом отформатировать содержимое. Также можно получить настройки принтера для полей и ориентации страницы. Чтобы адекватно реагировать на настройки принтера, укажите область печати, внесите изменения с учетом разницы между разрешением экрана и принтера или преобразуйте содержимое с учетом настроек принтера для размера или ориентации страницы.

Использование прямоугольников ограничения области печати

Метод PrintJob.addPage() позволяет указывать область спрайта, предназначенную для печати. Второй параметр, printArea, задается как объект Rectangle. Передать значение для этого параметра можно тремя способами.

  • Можно создать объект Rectangle с определенными свойствами, а затем использовать полученный прямоугольник в вызове addPage() , как показано ниже.

    private var rect1:Rectangle = new Rectangle(0, 0, 400, 200); 
    myPrintJob.addPage(sheet, rect1);
  • Если объект Rectangle еще не определен, это можно сделать в вызове метода, как показано ниже.

    myPrintJob.addPage(sheet, new Rectangle(0, 0, 100, 100));
  • Если требуется передать значения для третьего параметра в вызове addPage() , а прямоугольник определять не нужно, можно задать второму параметру значение null , как показано ниже.

    myPrintJob.addPage(sheet, null, options);

Сравнение точек и пикселов

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

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

  • 1 точка = 1/72 дюйма = 20 твипов

  • 1 дюйм = 72 пункта = 1440 твипов

  • 1 сантиметр = 567 твипов

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

Масштабирование

Если перед печатью требуется отмасштабировать объект Sprite, установите свойства масштабирования (см. Изменение размера и масштабирование объектов ), прежде чем вызывать метод PrintJob.addPage() , а затем верните их в исходное состояние после выполнения печати. Масштаб объекта Sprite не связан со свойством printArea . Другими словами, если задать область печати размером 50 х 50 пикселов, будет напечатано 2500 пикселов. Если объект Sprite масштабируется, распечатываются те же 2500 пикселов, но объект Sprite при этом печатается в отмасштабированном размере.

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

Печать страницы с альбомной или книжной ориентацией

Поскольку проигрыватель Flash Player и AIR может обнаруживать параметры ориентации, в код ActionScript можно добавить логику для изменения размера содержимого или его поворота в соответствии с настройками принтера, как показано в следующем примере.

if (myPrintJob.orientation == PrintJobOrientation.LANDSCAPE) 
{ 
    mySprite.rotation = 90; 
}
Примечание. Если планируется считывать системные настройки для ориентации содержимого на странице, необходимо импортировать класс PrintJobOrientation . Класс PrintJobOrientation содержит константы, определяющие ориентацию содержимого на странице. Для импорта класса используется следующая инструкция:
import flash.printing.PrintJobOrientation;

Настройка высоты и ширины страницы

Используя стратегию, подобную обработке настроек принтера для ориентации, можно считывать настройки для высоты и ширины страницы и учесть их, внедрив логику в инструкцию if . В качестве примера можно привести следующий код:

if (mySprite.height > myPrintJob.pageHeight) 
{ 
    mySprite.scaleY = .75; 
}

Кроме того, можно определить настройки полей, сравнив размеры страницы и бумаги, как показано ниже.

margin_height = (myPrintJob.paperHeight - myPrintJob.pageHeight) / 2; 
margin_width = (myPrintJob.paperWidth - myPrintJob.pageWidth) / 2;