Открыть сервис

Язык 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 `` Здесь:

  1. 2 и 3 помещаются в стек.
  2. Оператор add извлекает 2 и 3, складывает их и помещает результат 5 обратно в стек.
  3. 4 помещается в стек.
  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 →