Язык PostScript
PostScript — это язык описания страниц (Page Description Language, PDL), разработанный компанией Adobe Systems. Он используется для описания внешнего вида печатных страниц и векторной графики, позволяя точно задавать расположение текста, геометрических фигур и растровых изображений. PostScript является интерпретируемым языком программирования, основанным на стековой архитектуре и обратной польской записи (постфиксной нотации). Благодаря своей аппаратной независимости, он стал стандартом де-факто в издательском деле и полиграфии на протяжении 1980-х и 1990-х годов, а также лёг в основу формата Portable Document Format (PDF).
История
Предпосылки и создание
Разработка PostScript началась в 1982 году в компании Adobe Systems, основанной Джоном Уорноком и Чарльзом Гешке. Оба ранее работали в Xerox PARC, где участвовали в создании языка Interpress, также предназначенного для описания страниц. Однако Interpress был закрытым и привязанным к оборудованию Xerox. Уорнок и Гешке поставили цель создать открытый, универсальный язык, который мог бы работать на любых печатающих устройствах — от матричных принтеров до фотонаборных автоматов.
Первая версия языка, PostScript Level 1, была выпущена в 1984 году. Ключевым моментом стало использование интерпретатора, встроенного непосредственно в принтер. Это позволило перенести сложные вычисления по рендерингу страницы с компьютера на устройство вывода, что было критически важно для компьютеров того времени с ограниченными вычислительными ресурсами.
Развитие и стандартизация
- PostScript Level 1 (1984): Базовая версия, включающая возможности для работы с векторной графикой, текстом (шрифты Type 1, Type 3) и растровыми изображениями. Она быстро завоевала популярность благодаря появлению лазерного принтера Apple LaserWriter (1985), который первым использовал PostScript.
- PostScript Level 2 (1990): Значительное обновление, добавившее поддержку цветоделения, композитных шрифтов (CJK), улучшенное сжатие данных (например, JPEG), а также более эффективные алгоритмы для работы с памятью. Level 2 также ввёл концепцию «форм» (forms) для повторного использования элементов.
- PostScript 3 (1997): Последняя крупная версия. В ней были введены портативные документы (PDF), улучшена работа с прозрачностью, добавлены новые типы шрифтов (Type 1C, CID) и расширены возможности для работы с цветом (например, поддержка ICC-профилей). PostScript 3 также оптимизировал производительность для цветной печати.
Упадок и наследие
С 2000-х годов PostScript начал постепенно вытесняться форматом PDF, который, по сути, является его потомком. PDF — это более компактный, предсказуемый и удобный для обмена формат, который не требует интерпретации на стороне принтера в реальном времени. Однако PostScript остаётся важным промежуточным форматом в профессиональных рабочих процессах (например, в программах верстки Adobe InDesign и QuarkXPress), а также используется в некоторых промышленных RIP-системах (Raster Image Processor). Многие современные принтеры и МФУ всё ещё поддерживают PostScript через эмуляцию.
Архитектура и синтаксис
PostScript — это полноценный, хотя и узкоспециализированный, язык программирования. Его синтаксис основан на обратной польской записи (ОПЗ) или постфиксной нотации, где операнды указываются перед оператором.
Стековая модель
В основе языка лежит стек (LIFO — Last In, First Out). Все данные (числа, строки, массивы, словари) помещаются в стек, а операторы извлекают их оттуда для выполнения действий.
Пример: Вычисление (2 + 3) * 4 на PostScript: ``postscript 2 3 add 4 mul `` Здесь:
2и3помещаются в стек.- Оператор
addизвлекает2и3, складывает их и помещает результат5обратно в стек. 4помещается в стек.- Оператор
mulизвлекает5и4, умножает их и помещает результат20в стек.
Основные элементы
- Операнды: Числа (целые и вещественные), строки (в круглых скобках), булевы значения (
true,false), массивы (в квадратных скобках), словари (в двойных угловых скобках<< >>). - Операторы: Встроенные команды, такие как
moveto(переместить текущую точку),lineto(провести линию),stroke(обвести контур),fill(залить контур),show(вывести текст),setrgbcolor(установить цвет). - Процедуры: Определяются с помощью фигурных скобок
{ ... }. Они являются анонимными и могут быть сохранены в переменных или словарях. - Переменные и словари: PostScript использует словари для хранения имён и значений. Существует глобальный словарь
systemdictи локальный словарьuserdict. Определение новой переменной:/myVar 10 def(создаёт имяmyVarи связывает его со значением10).
Пример программы
Следующий код рисует красный круг диаметром 100 пунктов в центре листа формата A4: ```postscript %!PS-Adobe-3.0 %%BoundingBox: 0 0 595 842 %%Title: Circle Example %%EndComments
newpath % Начинаем новый контур 595 2 div % X-координата центра (половина ширины A4 в пунктах) 842 2 div % Y-координата центра (половина высоты A4 в пунктах) 100 0 360 arc % Рисуем дугу (центр X, центр Y, радиус, начальный угол, конечный угол) 0 0 0 setrgbcolor % Устанавливаем чёрный цвет обводки 1 0 0 setrgbcolor % Устанавливаем красный цвет заливки fill % Заливаем круг красным stroke % Обводим контур чёрным showpage % Выводим страницу %%EOF ```
Типы данных и графика
Векторная графика
PostScript изначально ориентирован на векторное описание. Основные графические примитивы:
- Линии и кривые:
lineto,curveto(кривые Безье третьего порядка). - Прямоугольники:
rectstroke,rectfill. - Дуги и окружности:
arc,arcn(по часовой стрелке),arcto. - Пути и контуры:
newpath,closepath,stroke,fill,eofill(заливка с правилом чётности-нечётности). - Трансформации:
translate,scale,rotate,concat(для матричных преобразований).
Растровая графика
PostScript поддерживает встраивание растровых изображений. Изображение описывается как массив пикселей, который может быть сжат (например, с помощью ASCII85 или FlateDecode). Для вывода растрового изображения используется оператор image (для чёрно-белых) или colorimage (для цветных). В PostScript Level 2 и 3 появилась поддержка JPEG и других форматов сжатия.
Текст и шрифты
PostScript произвёл революцию в типографике. Он поддерживает:
- Шрифты Type 1: Векторные шрифты, основанные на кривых Безье. Они были основным стандартом для профессиональной вёрстки до появления OpenType. Шрифты Type 1 содержат хинтинг (hinting) — инструкции для улучшения отображения на низких разрешениях.
- Шрифты Type 3: Более гибкие, но менее эффективные шрифты, которые могут содержать произвольные графические элементы (например, растровые изображения).
- Шрифты Type 1C (Compact Font Format): Сжатая версия Type 1, появившаяся в PostScript 3.
- CID-шрифты: Используются для поддержки больших наборов символов, таких как китайский, японский и корейский (CJK).
Оператор findfont ищет шрифт по имени, scalefont задаёт размер, setfont устанавливает текущий шрифт, а show выводит строку текста.
Применение
Полиграфия и издательское дело
PostScript был и остаётся основой допечатной подготовки (prepress). Файлы в формате PostScript (обычно с расширением .ps) используются для:
- Передачи макетов из программ верстки в RIP-системы.
- Цветоделения (разделения цветного изображения на CMYK-каналы).
- Создания фотоформ и печатных пластин (в технологии CTP — Computer-to-Plate).
Встраиваемые системы
Интерпретаторы PostScript встраивались в сотни моделей принтеров, МФУ и плоттеров. Это позволяло устройствам от разных производителей корректно обрабатывать один и тот же файл. Наличие PostScript в принтере долгое время считалось признаком профессионального оборудования.
Научные и инженерные приложения
PostScript используется для генерации графиков и диаграмм в научных пакетах (например, GNUplot, Mathematica, MATLAB). Его способность точно описывать геометрию делает его удобным для создания технической документации и чертежей.
Критика и ограничения
- Сложность и объём: PostScript — это полноценный язык программирования, что делает его избыточным для простых задач печати. Файлы
.psмогут быть очень большими, особенно при встраивании растровых изображений. - Интерпретируемость: Для вывода страницы требуется интерпретатор, работающий в реальном времени. Это может приводить к задержкам при печати сложных документов.
- Отсутствие интерактивности: PostScript не предназначен для просмотра на экране с возможностью навигации (поиск, закладки, гиперссылки). Эти функции были реализованы в его наследнике — PDF.
- Проблемы с прозрачностью: В ранних версиях (Level 1, Level 2) прозрачность не поддерживалась. В PostScript 3 она была реализована, но часто приводила к ошибкам при RIP-обработке.
Интересные факты
- Первым коммерческим устройством, использующим PostScript, был принтер Apple LaserWriter, выпущенный в 1985 году. Его стоимость составляла около 7000 долларов США.
- PostScript является полным по Тьюрингу языком, то есть на нём теоретически можно написать любую программу, включая игры. Существуют реализации игры «Жизнь» Конвея и простых текстовых квестов на PostScript.
- Формат PDF (Portable Document Format) был представлен Adobe в 1993 году как «потомок» PostScript, лишённый многих его недостатков. PDF — это не язык программирования, а статичный формат описания страниц.
- В 1990-х годах существовали аппаратные ускорители PostScript, такие как чипы от компании AMD (серия 29000), которые встраивались в принтеры для ускорения обработки.
Источники
- Adobe Systems Incorporated. PostScript Language Reference Manual (3rd Edition). Addison-Wesley, 1999.
- Adobe Systems Incorporated. PostScript Language Program Design. Addison-Wesley, 1988.
- Warnock, J., & Geschke, C. The PostScript Language. IEEE Computer Graphics and Applications, 1984.
- Справочная документация Adobe по PostScript (архивные материалы).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →