........................................................

Задать вопрос – НА ФОРУМЕ
Получить информацию – В РАЗДЕЛАХ
Сказать спасибо – В ГОСТЕВОЙ
Искать – ЗДЕСЬ

Что:
где:

........................................................

Возьми кнопку себе на сайт!

<a href="http://w-rabbit.narod.ru">
<img src="http://w-rabbit.narod.ru/w-rabbit.gif"
width=88 hight=31 border=0></a>

........................................................

© 2001. Design by Grayscale

........................................................


В. Миропольский

Язык PostScript и его конкуренты

Что такое язык PostScript? Каковы его особенности и как составлять программы на этом языке? Все эти вопросы волнуют умы программистов и пользователей, занятых в сфере настольного издательского дела.
PostScript является языком описания страниц и используется для связи с электронными печатающими устройствами. На PostScript'e можно описывать любые графические формы, двухуровневые изображения и печатаемые тексты (любой ориентации).
PostScript подобно FORTH является стековым языком. На Паскале, Си и многих других языках высокого уровня можно написать:
с=а+b
где a, b и с занимают индивидуальные ячейки памяти, не связанные со стеком. На PostScript'e мы имеем:
a b add
Здесь а и b помещены в стек, а оператор сложения add заносит результат с в начало стека, аналогично работе калькулятора Hewlett-Packard или любого другого устройства с инверсной польской записью. Аналогично, но, тем не менее, существует ряд отличий.
Работа PostScript'a не зависит от конкретного периферийного устройства. Это достигается путем установки в каждом принтере аппаратной реализации интерпретатора PostScript'a, который обеспечивает прозрачность для пользователя конкретного устройства и переносимость программ, написанных на PostScript'e.
PostScript определяет страницу оригинала по левому нижнему углу, что удобно при выполнении расчетов. Единицей измерения является пункт (1 дюйм = 72 пунктам). Для того, чтобы описать такую единицу измерения, как дюйм, необходимо написать следующую строку PostScript'a:
/inch {72 mul} def
Эта строка сообщает интерпретатору величину дюйма (inch). Символ "/" указывает, что слово "inch" не должно интерпретироваться. Вместо этого "inch" и "72 mul" помешаются в стек для последующего использования оператором def. Оператор def извлекает из стека эти два аргумента и помещает их в другой стек, называемый текущим словарем (current dictionary).
Мы создали процедуру языка PostScript. Тело процедуры на PostScript'e ограничивается фигурными скобками. Впоследствии интерпретатор, увидев запись типа "5 inch", поместит ее в стек, просмотрит текущий словарь, пока не найдет переменную "inch" и также поместит ее определение в стек. Поэтому выражение "5 inch" примет вид "5 72 mul" или 360 точек.
Аналогичным образом осуществляется присвоение значений переменных. Запись
/pi 3.1416 def
заносит в текущий словарь значение pi.
Термин "текущий словарь" не означает, что реально существуют какие-либо словари. Этот прием позволяет управлять заданием границ переменных и процедур.
Чтобы построить линию, необходимо написать следующую программу на языке PostScript. Она позволяет нарисовать линию в левом нижнем углу страницы.
newpath
0.01 inch setlinewidth
1 inch 0.9 inch moveto
0 inch-0.5 inch rlineto
0.9 inch 1 inch moveto
-0.5 inch 0 inch rlineto
stroke
showpage
Оператор инициализации (newpath) очищает маршруты (path), которые могли сохраниться до момента построения линии. Оператор setlinewidth устанавливает толщину линии. Оператор moveto устанавливает исходную точку линии с координатами X (1 дюйм) и Y (0.9 дюйма). Порядок параметров X, Y соблюдается для всех операторов PostScript'a.
Оператор rlineto ("relative line to") проводит линию к точке, удаленной на 0 дюймов по оси X и на -0.5 дюйма по оси Y относительно точки, указанной в предыдущей строке программы. Можно также воспользоваться оператором lineto для задания абсолютных координат.
Оператор stroke реально формирует линию, а оператор showpage дает команду принтеру на вывод страницы, по крайней мере - теоретически.
Интерпретатор PostScript'a работает только с текстами в кодах ASCII. Следует особо отметить то обстоятельство, что файлы PostScript'a требуют метки конца файла ^D, а не более привычной метки MS-DOS ^Z. Вы можете пользоваться своим любимым редактором (в режиме ASCII) для написания программ на PostScript'e, однако при этом требуется предпринять дополнительные действия. Если Ваш редактор текстов позволяет вводить в программу управляющие символы, следует поставить код ^D в конец файла. В противном случае можно воспользоваться отладчиком DEBUG.
Большинство редакторов сохраняет введенный код ^D. Поэтому не следует редактировать символ конца файла после каждого сохранения файла. Ваш редактор может дополнительно вставлять символ ^Z, но интерпретатору PostScript'a это безразлично.
Для построения изображения на языке PostScript используется тот же принцип, что и при построении монохромного изображения, где каждой выходной точке ставится в соответствие один бит. Поэтому мы можем управлять в лазерном принтере каждой из 300 точек (при разрешающей способности принтера 300 точек на дюйм).
Ниже показана программа на PostScript'e, предназначенная для печати монохромного изображения квадрата со стороной 5 дюймов (1500x1500 точек) в центре выдаваемого лазерным принтером листа размером 8.5x11 дюймов. Отметим, что встретив знак процента, интерпретатор игнорирует весь текст до конца строки, т. к. воспринимает его как комментарий.
% ОПРЕДЕЛЕНИЯ
% установить 16-тиричное значение длины строки
/strsize 188 string def
% процедуры
/inch {72 mul} def               % процедура "inch"
/fractal                         % процедура "fractal"
     % настроить матрицу преобразования
     {1500 1500 1 [1500 0 0  1500 0 0]
     % считать 16-тиричную информацию
     {currentfile strsize readhexstring pop}
     image                       % сформировать изображение
     % конец определения процедуры fractal
     } def
% ОСНОВНАЯ ПРОГРАММА
% поместить изображение в центр страницы
1.75 inch 3 inch translate
% придать ему размер 5x5 дюймов
5 inch 5 inch scale
% вызвать процедуру fractal
fractal
     % 16-тиричная матрица изображения
     OF12..........3COA
% напечатать страницу
showpage
% КОНЕЦ ПРОГРАММЫ
Процедура с именем "fractal" использует оператор изображения image. Этот оператор имеет следующие операнды: число горизонтальных элементов в линии изображения (1500); число линий (1500); число битов на элемент изображения (в данном случае 16 но может быть 2, 4 или 8 для изображений, основанных на градациях серого); матрица преобразования; процедура, предоставляющая информацию об изображении.
Матрица преобразования, записанная в виде
[1500  0  0  1500  0  0]
воспроизводит изображение 1500x1500 без изменений. Однако, попробуем переместить изображение нашего квадрата в левый верхний угол. В соответствии с требованиями языка PostScript, эту операцию можно выполнить с помощью следующей матрицы преобразования:
[1500  0  0  -1500  0  1500]
Другие элементы матрицы определяют поворот и масштаб изображения. Но операторы PostScript'a могут выполнять эти функции гораздо более простым способом, поэтому мы не будем сейчас говорить об элементах, содержащих нули.
Затем оператор image выполняет процедуру ввода данных для считывания операнда strsize (шестнадцатиричное число) из интерпретируемого файла. Для нашего случая это одна горизонтальная линия. Отметим, что шестнадцатиричный байт представлен в файле двумя символами ASCII. PostScript предполагает, что информация об изображении будет введена в основной программе сразу вслед за обращением к процедуре fractal.
Оператор image повторяет процедуру ввода данных до тех пор, пока не обработает достаточно информации, чтобы заполнить изображение, определенное первыми тремя параметрами.
Убедитесь в обеспечении точного количества информации, поскольку оператор image будет считывать такое количество данных, которое ему было указано независимо от того, сколько информации Вы реально поместили в файл.
Здесь слова "точное количество" означают очень многое. Если необходимо напечатать 1500 точек в строке, то при 8 точках на байт информации цели достигнут 187 с половиной байтов. Но изображение не понимает половинок и будет выбиваться из синхронизации четырьмя точками на каждой строке. Поэтому первая строка в программе присваивает параметру strsize значение 188 и изображение отбрасывает дополнительные половинки в конце каждой строки.
Основная секция программы располагает изображение в центре страницы, придает ему масштаб 5x5 дюймов и вызывает процедуру fractal. Практически, все 282000 байтов информации будут указаны вслед за процедурой fractal.
Даже из столь короткого описания возможностей языка PostScript видно, насколько удобны его конструкции для создания различных изображений, в том числе, безусловно, и всевозможных шрифтов, которые представляют собой основу настольных издательских систем.
Фирма Microsoft взяла лицензию у фирмы Apple на технологию макетирования шрифтов Royal с целью включения ее в операционную систему System 7.0, разрабатываемую для компьютеров Macintosh и последующего использования в системе Presentation Manager. Фирма Apple, в свою очередь, взяла лицензию у фирмы Microsoft на аналог языка PostScript, который фирма Microsoft купила у фирмы Bauer Enterprises.
Это означает, что на компьютерах Macintosh и PC система Presentation Manager будет использовать, в конечном счете, идентичные шрифты для генерации изображений на экране. Будет использоваться один и тот же язык описания страниц для перевода этих шрифтов с экрана на бумагу вместе с графическими изображениями, выполненными системой QuickDraw фирмы Apple или по технологии интерфейс графического программирования GPI (Graphic Programming Interface) фирмы Microsoft.
Отличительной особенностью языка PostScript является его системонезависимость. Файлы PostScript могут пересылаться по сетям, объединяющим IBM-совместимые компьютеры, Macintosh и системы Unix и распечатываться на лазерных принтерах коллективного пользования или типографских машинах с широким выбором разрешающих способностей. Эти файлы могут создаваться любыми основными прикладными системами на компьютерах IBM или Macintosh и легко обмениваться между ними.
Если бы фирме Adobe удалось добиться принятия языка Display PostScript в качестве стандарта экранных изображений подобно тому, как PostScript принят в качестве стандарта распечатываемых изображений, то появилась бы возможность унифицировать технологию изображений, что позволит выполнять обмен файлами PostScript между любыми двумя компьютерами и выводить изображение любого размера на экран или распечатывать на любом принтере.
Но хотя стандарт Display PostScript принят только фирмами IBM, DEC, NeXT, отчасти реализован фирмой Sun Microsystems и еще далек от принятия его в качестве промышленного стандарта, фирма Adobe и ее президент Джон Варнок (John Warnock) воспринимают отдельные движения фирм Apple и Microsoft в направлении унификации экранного и бумажного изображений для компьютера Macintosh и системы Presentation Manager с некоторым хладнокровием.
Фирма Adobe может преобразовать свои тщательно охраняемые схемы шрифтов в формат Royal для компьютера Macintosh. Более того, они уже работают в пакете Type Manager фирмы Adobe, который может формировать масштабируемые экранные шрифты для компьютера Macintosh из библиотеки Type Library. Фирма Adobe может сделать тоже самое и на рынке IBM-совместимых компьютеров, создав версию системы Type Manager для системы Presentation Manager и преобразовав свою библиотеку Type Library в какой-либо из форматов шрифтов, которые фирмы Microsoft и IBM выбрали для экранов и принтеров в системе Presentation Manager. Варнок с удовлетворением должен был следить за дебатами, которые вели фирмы Microsoft, IBM и Hewlett-Packard по вопросу о выборе технологии шрифтов. Фирма Hewlett-Packard, будучи лидером в области лазерных и прочих принтеров, настаивала на шрифте Agfa-Compugraphics Intellifont. Она уже использует эту технологию в своем струйном принтере DeskWriter для компьютера Macintosh и будет использовать ее в принтере LaserJet III. Будет очень удобно, если шрифты системы Presentation Manager станут совместимы с этой технологией. Однако фирма IBM не хотела давать преимущества Hewlett-Packard, своему главному конкуренту на рынке принтеров, и настаивала на принятии интерфейса IFI (Intelligent Font Interface), который предоставляет пользователям возможность перемешивать и согласовывать шрифты, полученные у разных разработчиков, но проблемы совместимости для согласования шрифтов с имеющимися у них принтерами все равно останутся. Фирма Microsoft, в свою очередь, не поддерживала интерфейс IFI, а выступала за стандарт открытых шрифтов, который позволял бы любому изготовителю создавать шрифты в системе Presentation Manager для экранов и принтеров. Шрифты фирмы Adobe не рассматривались, так как для защиты своих разработок фирма Adobe их зашифровывает. Стандарты отдельных изготовителей шрифтов, таких, как Agfa-Compugraphics и Bitstream с технологией Speedo были слишком частными. Фирма Apple также создает собственный аналог языка PostScript и новую технологию макетирования шрифтов, которая полностью открыта и поддерживается всеми основными изготовителями шрифтов.
Если фирмы Apple и Microsoft смогут создать открытый унифицированный экранно-бумажный стандарт изображения, пригодный для разнообразной аппаратуры, и смогут заручиться поддержкой достаточного числа изготовителей шрифтов и печатающих устройств, то язык PostScript отойдет далеко на задний план.

По материалам:
PostScript Language Reference Manual, by Adobe Systems, Addison-Wesley, 1989
PostScript Language Program Design, by Adobe Systems, Addison-Wesley, 1988
Larry Fogg "PostScriptal", журнал "Micro Cornucopia", № 49 октябрь 1989
Peter Jackson "PostScript to history?", журнал "PC User", № 117 октябрь 1989

На главную страницу <<<

Hosted by uCoz