Семь уроков по PostScript

       

Основные понятия


Одной из причин, вызвавшей появление и расцвет языка PostScript является необходимость выводить текст и изображения на растровые внешние устройства: матричные, струйные и лазерные принтеры, а также экраны мониторов. Основное свойство таких устройств заключается в том, что изображение на них строится из массива прямоугольных элементов, называемых пикселами (от  picture element - элемент изображения). Каждый пиксел имеет в этом массиве свой адрес - номер строки и номер столбца, где он расположен, а также цвет: у обычных матричных принтеров пикселы могут быть либо черного цвета, либо белого (в этом случае их часто называют точками); у лазерных принтеров пикселы имеют до 256 градаций серого цвета, у цветных мониторов - до сотен тысяч цветов. Устанавливая определенные пикселы в нужные цвета, мы получаем на экране текст и графические изображения.

Так как у каждого растрового устройства пикселы имеют физические размеры, зависящие, например, от размера печатающих иголок матричного принтера или сетки на экране монитора, то число элементов изображения на единицу длины (обычно дюйм) называется разрешением растрового выводного устройства. В зависимости от этой характеристики устройства делятся на устройства с низким, средним и высоким разрешением. Для лазерных принтеров это соответственно до 300, 300-600 и более 600 dpi (точек на дюйм). Для каждого типа устройств границы этих классов свои, так для 14" мониторов разрешение  более 50 dpi будет уже высоким. Чем выше разрешение, тем лучше качество изображения.

PostScript-устройство (принтер, монитор) -- это устройство, в котором имеется интерпретатор языка PostScript. Интерпретатор PostScript принимает из компьютера текстовый файл с описанием страницы и преобразует его в растровую форму, которая и выводится на печать или на экран. (С этим и связана близкая к языку Форт структура PostScript -- она обеспечивает наименьший размер интерпретатора). Во время преобразования описания интерпретатор выполняет различные действия, зависящие от типа устройства. Так если на черно-белое печатающее устройство выводится полутоновое изображение, то интерпретатор PostScript этого устройство выполняет разбиение полутоновых областей на зоны с определенным уровнем серого цвета и заполняет каждую зону черными точками с плотностью, зависящей от этого уровня, что создает иллюзию полутонов на результирующем изображении.


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

(Однако с интерпретатором языка PostScript можно работать и  на самом ПК как работаем мы с Бейсиком или любым другим языком. Есть различные реализации интерпретаторов PostScript, но лучше воспользоваться общедоступной программой Gnostscript, работающей как под DOS, так и в Windows. Её можно, в частности, поискать в Internet. )

Чтобы обеспечить независимость описания страницы от всего разнообразия внешних растровых устройств в языке PostScript введено понятие текущей страницы.

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

Текущий путь (current path) - это набор соединенных между собой отдельных точек, линий, кривых, которые вместе описывают фигуры и их положение. На текущий путь не накладывается никаких ограничений (он может пересекать сам себя и т. д.) Элементы текущего пути задаются их позициями на текущей странице.

Текущий путь обрезки (Current clipping path) -- это границы области, в которой может быть нарисовано изображение.

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



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



Пространство пользователя может быть изменено тремя способами:

1) начало его системы координат может быть перенесено в любую точку пространства пользователя;

2) оси могут быть повернуты в любом направлении;

3) масштаб по каждой оси может быть произвольно изменен, т. е. может быть задано любое линейное преобразование из пространства пользователя в пространство устройства.

Набор символов

Все виды скобок (круглые, квадратные, фигурные, угловые) и знак процента являются для PostScript специальными знаками. Остальные символы -- подмножество кода ASCII используются в программе без ограничений и называются регулярными символами.

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

Стек операндов - содержит собственно объекты PostScript и результаты действий над ними. Операторы PostScript получают  операнды только через стек.

Постфиксная нотация (обратная польская запись).

Операции над данными в PostScript требуют, чтобы их операнды сначала были помещены в стек. Такой стиль программирования, при котором операнды задаются до операции над ними (оператора) называется постфиксной нотацией. Так запись операции сложения двух чисел, допустим 4+5, в PostScript будет выглядеть так:



4 5 add

Типы данных. Как и другие распространенные языки программирования PostScript поддерживает различные типы данных, включая integer, real, boolean, массивы и строки. В нём определяются также объекты типа mark (отметка, метка) и dictionary (словарь).

Примеры записи целых чисел:  345  -87  38554  0  +57

Если величина числа превышает предел для представления целых чисел, оно автоматически конвертируется интерпретатором в число типа real.

Примеры записи действительных чисел:

 -2.0  12.3  2E-5  0.0  345.6e8  -.025

Беззнаковые целые числа могут быть записаны в любой из 35 систем счисления с использование префикса в виде:

база#число

где база - основание системы счисления, десятичное целое число от 2 до 36;

число - представление числа в системе в указанной префиксом системе счисления. Цифры в системах счисления по основанию больше 10  представляются буквами латинского алфавита от A до Z.

Например: 16#cb2e  2#11001011  8#377

Строка - это последовательность символов, заключенная в круглые скобки.

О гибкости языка.  Несмотря на большое количество встроенных операторов в PostScript нет зарезервированных слов. Любое слово переопределяемо. Программа в PostScript может рассматриваться как данные и это сближает его с языками типа Лисп.

Переносимость программ. Программы на PostScript записываются с использованием только печатаемых символов кода ASCII, что позволяет обращаться с ними, как с обычными файлами, т. е. не возникает никаких проблем при пересылке таких файлов по сетям.


Содержание раздела