PostScript

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
PostScript
Изображение логотипа
Класс языка мультипарадигменный,стековый,процедурный
Появился в 1982
Автор Джон Уорнок,Чарльз Гешке
Разработчик Adobe
Расширениефайлов .ps
Выпуск PostScript 3 (1997)
Система типов строгая,динамическая
Основные реализации Adobe PostScript, TrueImage,Ghostscript,InterPress
Испытал влияние Forth
Повлиял на PDF,Encapsulated PostScript

PostScript(рус.постскрипт) — язык описания страниц, в основном используемый внастольных издательских системах.

PostScript был разработанДжоном УорнокомиЧарльзом ГешкеизAdobe Systemsв начале1980-хгодов. Исходно PostScript использовался как ядро механизма печати компьютеровApple,но вскоре стал широко распространенным для большинства компьютерных систем. Интерпретаторы PostScript (в виде программных или аппаратных компонентов) для печати документов присутствуют практически во всех современных компьютерных системах.

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

Концепция языка PostScript была заложена в1976 годуДжоном Уорноком,сотрудникомEvans and Sutherland Computer Corporation[англ.].Его коллега Джон Гэфни (англ.John Gaffney), занимавшийся тогда интерпретатором для большой базы данных трёхмерной графикиНью-Йоркской гавани,создал язык «Design System» (очень похожий наForth). Позже Джон Уорнок перешёл в исследовательский центрXerox PARCв Пало-Альто и в 1978 году вместе сМартином Ньюэллом[англ.]создал на базе Design System новую системуJaM(John and Martin), использовавшуюся в исследованиях печати и позже развившуюся вInterPress[англ.]— протокол печатиXerox.

В1982 годуДжон Уорнок уволился из Xerox и вместе сЧаком ГешкеосновалAdobe Systems.Вначале их целью было создание специализированной рабочей станции для печати, которая должна была называться PostScript, но вскоре они поняли, что лучше сконцентрировать усилия на разработке средств для управления принтерами сторонних производителей.

В1984 годуувидел свет PostScript (позже к названиюбыло добавленоLevel 1, чтобы отличать его от Level 2). PostScript имел ряд преимуществ перед другими системами того времени:

  • платформонезависимость. Один и тот же файл мог печататься как на лазерном принтере, выдававшем тогда 300dpi,так и нафотонаборном устройствес 2400 dpi с наилучшим качеством в каждом случае;
  • любой производитель мог получить лицензию наинтерпретаторPostScript и использовать PostScript со своим устройством;
  • спецификации PostScript были общедоступны, таким образом, любой разработчик мог писать программы, поддерживающие PostScript.

Adobe рисковала, выпуская PostScript, и, возможно, ей не удалось бы убедить рынок в необходимости такого языка, если бы неСтив ДжобсизApple Computer1985 годупродажи компьютеровMacintoshначали падать, и Apple нужен был «killer app» — нечто, что мог бы только её компьютер. Стив Джобс инвестировал 2,5 млн $ в Adobe, которая создала PostScript-контроллер для принтера AppleLaserWriter,и вAldus,создавшую программуPageMaker,использовавшую все возможности Macintosh и LaserWriter. Появившаяся тогда возможность допечатной подготовки на компьютере спасла Apple и превратила Adobe и Aldus в крупные компании. Другие производители фотонаборной аппаратуры, начиная сLinotype,оценили PostScript и вскоре оснастили свою фотонаборную аппаратуру интерпретаторами PostScript. PostScript стал стандартом в области допечатной подготовки.

В1991Adobe выпустила следующую ревизию PostScript — PostScript Level 2. Это была значительная переработка, давно ожидавшаяся издательским сообществом. Основными улучшениями были:

  • увеличенная скорость и надёжность (в основном это коснулось управления памятью);
  • поддержка цветоделения в самом контроллере;
  • распаковка сжатых изображений в самом контроллере (JPEGи CCITT group 4);
  • поддержка больших наборов шрифтов (для азиатских стран);
  • кэширование шрифтов и изображений;
  • улучшенныедрайверы;
  • улучшенныеалгоритмыпечати изображения (Accurate Screening).

Adobe совершила ошибку, обнародовав спецификации PostScript Level 2 до начала работ по его аппаратной реализации. Конкуренты неожиданно вышли на рынок сэмуляторамиPostScript Level 2 раньше самой Adobe. В результате потребовалось очень много времени, прежде чем приложения начали использовать все новые функции PostScript level 2.

В1998 годуAdobe ввела новый стандарт PostScript 3. Изменения по сравнению с Level 2 незначительны. Это можно понять, учитывая, что множество приложений до сих пор не может обеспечить полную поддержку PostScript Level 2. Основные преимущества PostScript 3:

  • поддержка 4096 уровней на один цвет (12-битна цвет, до того было 256 оттенков — 8 бит на цвет);
  • поддержкаPDF(контроллеры PS Level 3 могут выводить PDF наряду с файлами PS Level 2);
  • расширенная поддержка цветоделения (контроллеры PS 3 могут производить цветоделение изображений, заданных в оттенках серого или в шести цветах);
  • добавлена интернет-функциональность (Web-ready printing), пока что никто из OEM-партнёров Adobe не реализовал её.

Область применения

[править|править код]

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

PostScript — больше, чем типичный язык управления принтером, он является полнофункциональным языком программирования. Многие прикладные программы могут преобразовать документ в PostScript-программу, при выполнении которой будет получен начальный документ. Эта программа может быть послана непосредственно на принтер с поддержкой PostScript или преобразована интерпретатором PostScript в другой формат (для принтеров без поддержки PostScript), или результат её выполнения интерпретатором может быть показан на экране. Так как исходная PostScript-программа одна и та же, PostScript называетсянезависимым от устройства.

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

Имеется коммерческая версия системыТеХ— BaKoMa TeX, написанная советским и российским программистом В. Малышевым полностью на PostScript.

PostScript — полнофункциональныйтьюринг-полныйязык программирования.Хотяпрограммына PostScript и создаются в основном не людьми, а другими программами, в принципе ничто не мешает писать на нём программы[1]для обсчёта графики, реализации численных методов решения математических задач и т. п.

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

ВPostScriptдля рисования используется двумерная прямоугольнаясистема координат,начало которой совпадает с левым нижним углом страницы; осьXпо умолчанию направлена горизонтально (то есть по ширине страницы), осьY— вертикально. Единицей измерения линейных координат служиттипографский пункт.С помощью операторов языка [6, pp. 517–518] начало системы координат может быть перенесено в любую точку (операторtranslate), а сама система — повернута на произвольный угол в плоскости страницы (операторrotate); масштаб по каждой из двух осей с помощью оператораscaleтакже может быть изменен. Например, «зеркальный» вывод изображения на плёнку (т. н. «Emulsion down») вPostScript-принтерах осуществляется при помощи одного единственного оператораscale,задающего отрицательный масштаб по одной из осей системы координат: например,-1.0 1.0 scale.

PostScriptимеет черты метафайла, совмещая поддержку как векторных, так и растровых изображений.ШрифтывPostScriptтолько векторные. Немного особняком стоят т. н.Type3-шрифты, в которых для рисованияглифов(процедура/BuildGlyph) может быть использованалюбаяпроцедура, сформулированная в терминах языкаPostScript[6, pp. 337–342]. После выхода SP4 для Windows NT 4.0 в 1998 году (см. такжеhttp://support.microsoft.com/gp/lifesupsps) при установленном в системеAdobe Type Manager 4.0и драйвереAdobePS 5все шрифты в не-romanкодировке, в частности, кириллица, выгружались вPostScript-файл в видеType3-шрифтов, где каждый глиф был представлен в виде растрового изображения соответствующего разрешения. Выгрузка шрифта в виде растровых изображений создала много проблем при подготовке к выводу нафотонаборидопечатной подготовкевообще. Эта ошибка была исправлена вAdobePS 5.1иAdobe Type Manager 4.1,которые затем вошли в дистрибутивWindows 2000.

Структура документа

[править|править код]

Структура файла PostScript формируется структурными комментариями. Структурные комментарии начинаются с последовательности символов «%%» в начале строки.

Файл PostScript состоит из четырёх частей: заголовка, пролога, тела и эпилога.

Заголовок начинается строкой «%!PS-Adobe-N.M» где N.M — версия спецификации, далее идут структурные комментарии с общими свойствами документа, и заканчивается заголовок строкой «%%EndComments».

%!PS-Adobe-2.0
%%Creator: dvips(k) 5.78 Copyright 1998 Radical Eye Software
%%Title: rep.dvi
%%Pages: 9%%PageOrder: Ascend
%%BoundingBox: 0 0 596 842
%%EndComments

В прологе обычно содержатся описания подпрограмм и данные, необходимые для печати документа — например, процедуры и шрифты. Пролог заканчивается комментарием «%%EndProlog».

В теле программы содержатся команды, отвечающие за отрисовку каждой страницы, предваряемые строкой «%%Page: <метка> <номер>», где <метка> — метка страницы, которая не выводится на печать, и <номер> — порядковый номер страницы в файле, например,%%Page: iii 3

После команд отрисовки всех страниц идёт структурный комментарий «%%Trailer», после чего начинается эпилог.

В эпилоге можно продублировать комментарии из заголовка (это реализовано на случай, если в начале вывода программе ещё не известно, например, число страниц) — в этом случае вместо числовых значений параметров в заголовке надо писать «(atend)».

Заканчивается файл строкой «%%EOF».

Обзор элементов языка

[править|править код]
Стеки

В PostScript для хранения данных разных типов используются четыре стека: стек операндов, стек графических контекстов, стек исполнения, стек словарей.

Типы данных

Основные типы данных языка PostScript: целое число со знаком, вещественное число, логическое выражение (trueилиfalse), строка символов( (… ) ),массив( [… ] ),процедура( {… } ),словарь, имя.

Операторы

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

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

Краткий обзор механизма рисования изображения

[править|править код]

Процесс рисования (растрирования) при выполнении (интерпретации)PostScript-программы заключается в вычислении для каждогопикселаустройства вывода одного (для монохромного) или нескольких (например четырёх дляCMYK-устройства или шести дляCMYKOrGr) значенийпараметра(-ов) в диапазоне от 0 до 1,0. Вычисленное значение параметра (-ов) используется в качествеаргументаещё одной важнойфункцииtransfer function(русскоязычныйсинонимотображение). По умолчанию в подавляющем большинстве случаев эта функция представляет собой простейшую функцию y(x)=x и её значение тождественно равно значению аргумента. Однако в ряде случаев — например для компенсациирастискиванияиспользуются достаточно сложные нелинейные зависимости y(x), задаваемые кусочной либо табличнойаппроксимацией.Кусочно-линейнаяаппроксимацияtransfer functionиспользуется например вEPS-иPS-файлахAdobe Photoshop— для аппроксимации используется разбивкаобласти определения[0;1,0] на сорок участков с шагом 0,025 (2,5 %растровой точки); на каждом из сорока участковtransfer functionимеет вид y(x)=b·x+a.Transfer functionвида y(x)=1-x (в терминахPostScript language{1 sub neg} settransfer) обращает изображение, делая из негонегатив— именно таким образом печатают негативPostScript-принтеры.

Для монохромных устройств — например дляфотонабора,решение о закрашивании (засветке) пикселя может приниматься в результате сравнения вычисленного для данногопикселазначенияtransfer functionи значения т. н.Spot-функции либо двумерногомассиваThreshold array:в случае, если значениеtransfer functionбольше значенияSpot-функцииили элементаThreshold arrayдля этого пиксела последний закрашивается (засвечивается).

Специальный подборtransfer functionиSpot-функции илиThreshold arrayпозволяет получить отношение числа закрашенных и незакрашенных пикселей устройства вывода для каждого пиксела исходного (растрируемого) изображения таким, что на оттиске (отпечатке)средняяяркость соответствующего участка изображения почти пропорциональна значению вычисленного параметра (см. выше).

Подобным образом формируются точки различного размера, из которых состоит полутоновое изображение на типографских оттисках: в газетах, журналах, книгах.

Пример программы

[править|править код]
%!PS-Adobe-1.0
% По умолчанию, постскрипт использует единицу измерения 1пункт=1/72дюйма,
% а нам нравятся миллиметры.
72 25.4 div % 1 мм = 72/25.4 пунктов
dup % дублировать значение на вершине стека
scale % растянуть в это количество раз по обеим координатам
100 100 translate % установить начало координат в (100 мм, 100 мм)

/Times-Roman findfont % взять шрифт Times-Roman
10 scalefont % растянуть до размера 10 (у нас - мм!)
setfont % установить выбранный шрифт

0 30 330 { % цикл для углов от 0 до 330 с шагом 30
gsave % запомнить текущее преобразование координат
rotate % повернуть систему координат (угол в градусах берём с вершины стека)
15 0 moveto % перейти в точку (15 мм, 0 мм)
(Wikipedia) show % написать слово текущим шрифтом
grestore % вернуть преобразование координат
} for % конец цикла for

showpage % вывести страницу

Вывод программы

[править|править код]
Вывод программы

Обработка шрифтов

[править|править код]

Почти столь же сложно, как сам PostScript, его обращение сошрифтами.Система шрифтов использует графические примитивы PS для рисованияглифовкривыми линиями, которые затем могут быть отображены с любымразрешением.Рядтипографскихвопросов возникает при этом подходе.

Одна из проблем — что шрифты не масштабируются линейно при небольших размерах — решается включениемхинтинга.В то время, когда технология включения хинтов в шрифтах строго охранялась, «хинтованные» шрифты были закодированы и сжаты в то, что Adobe называла фонт Type 1 (который известен также как,PS1,T1илиAdobe Type 1). Type 1 был скорее средством для хранения исключительно информации об очерчивании символов, чем полноценным языком (PDF подобен в этом отношении). Adobe затем начала продавать лицензии на технологию Type 1 тем, кто хотел добавлять хинты к своим шрифтам. Те, кто не приобрёл лицензию на эту технологию, остались с шрифтом Type 3. Шрифты Type 3 позволяли применение всей сложности языка PostScript, но без стандартного подхода к хинтам.

Шрифт Type 2, который предназначен для использования с форматомCompact Font(CFF), был реализован, чтобы уменьшить общий размер файла шрифта. Позже он стал основой для обращения сOpenType-шрифтами.

Для того, чтобы конкурировать с системой Adobe, Apple разработал в 1991 году свои собственныеTrueType-системы. Сразу после объявления TrueType Adobe опубликовала спецификации для форматаType 1.С тех пор появилось много бесплатных шрифтов Type 1. Например, шрифты, используемые системой версткиTeX,доступны в этом формате.

В конце 1990-х годов Adobe присоединилась к Microsoft в разработкеOpenType.По существу, это было объединение и расширение форматов Type 1 и TrueType. При печати на выходе PostScript-устройства избыточные части OpenType-шрифта опускаются, и то, что посылается драйверу печатающего устройства, не отличается от того, что выдается TrueType- или Type 1-шрифтами.

CID-индексированные шрифты

[править|править код]

Формат CID-индексированных (сокращение для Character Identified) шрифтов был разработан, чтобы решить проблему адресацииглифовв иероглифических языках с очень большим числом символов (китайский, корейский, японский). Этот формат может быть использован с форматомType 1для стандартных CID-индексированных шрифтов илиType 2для CID-индексированныхOpenTypeшрифтов.

Каждый глиф элемента в коллекции символов идентифицируется уникальным индексом символа (CID) в этой кодировке, который может не совпадать с кодом соответствующего символа, например, вUnicode.

Коллекции символов уникально называются «регистри», «упорядочением» и «дополнением», например «Adobe-Japan1-6». Регистри обозначает разработчика (например, Adobe). Упорядочение раскрывает цель набора символов (например, «Japan1»). Дополнительный номер (например, 6) указывает часто на объем коллекции. Например, коллекция Adobe-Japan1-0 составляет 8284 глифа, а Adobe-Japan1-6 — 23058 глифов.

Шрифты с ключом CID могут быть сделаны без ссылки на коллекцию символов, используя кодировку «identity», такую как Identity-H (для горизонтальной записи) или Identity-V (для вертикальных). Такие шрифты могут иметь уникальный набор символов, и в этом случае номер CID глифа не является информативным; обычно вместо этого используется кодировкаUnicode,потенциально с дополнительной информацией.

Технология Adobe ClearScan создаёт пользовательские шрифты Type1-CID для соответствия визуальному оформлению отсканированного документа после оптического распознавания символов (OCR). ClearScan (в Acrobat 9) не заменяет шрифты на системные шрифты или на Type1-MM (как в Acrobat 8 и более ранних версиях), а использует эти вновь созданные пользовательские шрифты. Пользовательские шрифты встроены (embedded) в файл PDF.

Тенденции и перспективы

[править|править код]

Помимо PostScript, на рынке лазерных принтеров широкое распространение получил язык управления принтеромPCL,разработанныйHewlett-Packard.PCL изначально нацеливался на иные задачи, чем PostScript (управление принтером, а не описание страницы), и не может обеспечиватьпереносимость.Однако для офисного использования он в ряде случаев более удобен. PCL использует стандартныеWindows-шрифтыTrueType(в отличие от PostScript). Кроме того, последняя его версия (PCL6) разрабатывалась HP в тесном сотрудничестве сMicrosoftи потому обеспечивает ускоренный возврат ответа в приложение, быструю печать сложных графических изображений, улучшенное качество печати и повышенную точность при выводе документов.

Кроме того, язык PostScript предполагает лицензирование и выплату лицензионных отчисленийAdobeс каждого контроллераRIP(Raster Image Processor), в то время как язык PCL может использоваться сторонними производителями бесплатно. Поэтому лицензированные RIP PostScript 3 для плоттеров производства HP стоят около 500 долларов, в то время как нелицензированные контроллеры — «эмуляция PS2» производстваOKIстоят 30—70 долларов.

Практически все лазерные принтеры 1990-х годов поддерживали PostScript в качестве основного языка; начиная с 2000-х годов множестволазерных принтеровклассаSOHOне оснащается поддержкой PostScript с целью удешевления. Таким образом, PostScript вытесняется из офисов языком PCL, оставаясь, тем не менее, практически безальтернативным стандартом в области допечатной подготовки.

  1. Evan Danaher.Life in PostScript(англ.).—Игра «Жизнь»на языке PostScript (GPL). — «англ.I learned that Postscript is a real language, not just for graphics. So I spent a bit of time learning it, and wanted to do something interesting in it. So of course, the obvious choice was John Conway's game of life.». Дата обращения: 9 апреля 2012.Архивировано15 мая 2012 года.
  • Роберт Шимонски.Освой самостоятельно Unix. 10 минут на урок= Sams Teach Yourself Unix in 10 Minutes. —М.:«Вильямс»,2006. — С. 272. —ISBN 0-672-32764-3.
  • С. Немнюгин, М. Чаунин, А. Комолкин. Эффективная работа в UNIX. СПб.: «Питер», 2001.ISBN 5-272-00197-4
  • Романовский И. В., Столяр С. Е.«Стеки и стековые языки».Учебное пособие. — СПб.: «Информатизация образования», 2002. — 35 с.
  • Glenn C. Reid.Thinking in PostScript,Addison-Wesley, 1990.