замечания
PostScript — это реверсивный полигон, динамически типизированный, динамический интерфейс имен, язык сценариев со встроенными примитивами для генерации визуализированных изображений из векторных описаний. PostScript использует ту же «Adobe Image Model», что и формат PDF-файла.
PostScript используется в качестве выходного формата для многих программ, поскольку он предназначен для простого машинного генерирования.
Как и LISP, PostScript является homoiconic, а код и данные имеют одинаковое представление. Процедуры могут принимать процедуры в качестве данных и давать процедуры в качестве результатов, предоставляя также методы из конкатенативного программирования .
Установка или настройка
Аутентичные интерпретаторы Adobe PostScript доступны в высококачественных принтерах, продукте Display PostScript (DPS) и продукте Acrobat Distiller. Как авторы стандарта, эти продукты считаются «стандартной реализацией» с целью описания различий между реализациями PostScript.
Стандартный интерфейс к интерпретатору, определенному в PLRM, представляет собой программный поток, который может быть текстовым или двоичным в зависимости от деталей базового канала или ОС / контроллера. Acrobat Distiller имеет интерфейс GUI для выбора входной программы постскриптума и вывода ее в виде pdf. Distiller также имеет ограниченную поддержку для использования текстового потока вывода для сообщения об ошибках и других выходных данных программы. GSView предоставляет аналогичный графический интерфейс для аналогичного рабочего процесса, используя Ghostscript в качестве интерпретатора.
Ghostscript и Xpost работают в режиме командной строки. Файл программы postscript для запуска можно xpost program.ps
в командной строке ( gs program.ps
xpost program.ps
или xpost program.ps
), которая откроет графическое окно для отображения графического вывода. Параметры могут использоваться для рендеринга графики в другом месте, например, на диске, или полностью отключить графику и использовать постскриптум, как язык текстовых сценариев.
У разных переводчиков есть свои инструкции по установке и настройке, и для их воспроизводства они были бы расточительными (и склонными к падению).
-
Ghostscript доступен для всех основных платформ и дистрибутивов Linux в исходной или двоичной форме в соответствии с лицензией GNU или по другим соглашениям с авторами, программным обеспечением Artifex . Ghostscript реализует полный стандарт PostScript 3.
-
Xpost доступен в исходной форме для всех основных платформ в соответствии с лицензией BSD-3. Он реализует стандарт уровня 1 с некоторыми расширениями уровня 2 и некоторыми расширениями DPS.
Общее описание PostScript
PostScript — это полный язык программирования Turing, разработанный и разработанный Adobe Systems. Многие идеи, которые расцвели в PostScript, были культивированы в проектах для Xerox и Evans & Sutherland.
Его основное приложение в реальном мире исторически относится к языку описания страниц или в одностраничной форме EPS — это векторный графический язык описания образов. Он динамически типизирован, динамически-скопирован и основан на стеке, что приводит к преимущественно синтаксису Reverse Polish.
Существует три основных выпуска PostScript.
- PostScript Level 1 — это было выпущено на рынок в 1984 году как резидентная операционная система лазерного принтера Apple LaserWriter, открывающая эпоху настольных издательских систем.
- PostScript Level 2, выпущенный в 1991 году, содержал несколько важных улучшений уровня 1, включая поддержку декомпрессии изображений, разделение RIP, словари для автоматического выращивания, сбор мусора, именованные ресурсы, двоичные кодировки самого потока программы PostScript.
- PostScript 3 — последняя и, возможно, наиболее широко распространенная версия, была выпущена в 1997 году. Она также содержит несколько улучшений импорта по сравнению с уровнем 2, например Smooth Shading. Термин «уровень» был отброшен.
Хотя PostScript обычно используется в качестве языка описания страниц, и поэтому он реализуется внутри многих принтеров для создания растровых изображений — его также можно использовать для других целей. Как быстрый калькулятор с обратной полярностью с более запоминающимися именами операторов, чем bc
. В качестве выходного формата, сгенерированного другой программой (обычно на каком-то другом языке).
Хотя файл PostScript обычно является 7-битным чистым ASCII, существует несколько видов двоичной кодировки, описанных в стандарте уровня 2. И, будучи программируемым, программа может реализовать свою собственную схему произвольно сложного кодирования для себя. Существует международный конкурс по изучению окутанных поскриптов, несколько менее активный, чем C.
Интернет-ссылки
-
Индексные страницы документации Adobe:
https://www.adobe.com/products/postscript/resources.html
http://www.adobe.com/devnet/postscript.html
http://www.adobe.com/devnet/font.html -
Справочное руководство по языку PostScript , 3ed — стандарт PostScript 3. (7.41MB pdf)
( Дополнение , Исправление ) -
Справочное руководство по языку PostScript, 2ed — стандарт PostScript Level 2. (включает в себя документацию Display PostScript.) (3.29MB pdf)
-
Постскриптум и Поваренная книга — Синяя книга. (847 КБ pdf)
-
Дизайн программы Postscript — Зеленая книга. (911 КБ pdf)
-
Мышление в Postscript — автор книги «Зеленая книга» и учебник по сине-книгам. (826 КБ pdf)
-
Спецификации структурирования документов PostScript Language Specification 3.0 (521KB pdf)
-
Формат шрифта Adobe Type 1 (444 КБ pdf)
-
Инкапсулированный формат файла формата PostScript 3.0 (185 КБ pdf)
-
PostScript Printer Описание Формат файла 4.3 (186KB pdf) ( обновление )
-
Устранение ошибок PostScript — Советы по отладке. (158 КБ html)
-
Acumen Journal — Архив статей статей Postscript и PDF. (html-каталог сжатых pdf-файлов)
-
Математические иллюстрации: руководство по геометрии и постскриптуму — Биллом Кассельманом. (html-каталог разделов pdf и загрузки кода)
-
Тема с множеством алгоритмов сортировки (архив Usenet)
-
Страницы Гуру Дон Ланкастера
-
Прямое использование Anastigmatix языка Postscript
-
Поэтапный отладчик с открытым исходным кодом для кода Postscript
Вопросы и ответы
-
Часто задаваемые вопросы Usenet (около 1995)
-
Часто задаваемые вопросы по Wikibooks
-
SO PostScript-вопросы, отсортированные наиболее часто просматриваемыми
книги
-
PostScript Language Reference Manual, 1ed, 1985. Рекомендуется для небольшого размера и простого указателя оператора из итоговых страниц (отсутствует в последующих выпусках).
-
Реальный мир Postscript. Главы разных авторов по различным темам, в том числе превосходное освещение полутонов.
Локальные пространства имен для функций
Postscript — это динамический язык имен или язык LISP 1 . Но он предоставляет инструменты для реализации локальных переменных в процедурах и других эффектах, необходимых для реализации алгоритмов.
Для локальных имен в процедуре создайте новый словарь в начале и поместите его в конец.
/myproc {
10 dict begin
%... useful code ...
end
} def
Вы также можете сочетать это с ярлыком, чтобы определить аргументы функции как переменные.
% a b c myproc result
/myproc {
10 dict begin
{/c /b /a} {exch def} forall
%... useful code yielding result ...
end
} def
Если вам необходимо обновить * «глобальный» * переменной , а локальный словарь сверху, использование store
вместо def
.
Пример Hello World
Выберите шрифт и шрифт, выберите местоположение, строку show
.
%!PS
/Palatino-Roman 20 selectfont
300 400 moveto
(Hello, World!) show
showpage
Примечания и общие ошибки:
-
Невозможность установить шрифт (в результате не будет текстового или стандартного (уродливого) шрифта)
-
С помощью
findfont
иsetfont
но забывая оscalefont
между ними. Использование level-2selectfont
позволяет избежать этой проблемы и является более кратким. -
moveto
установить точку сmoveto
или установить точку за пределами страницы. Для бумажной бумаги в США 8.5×11 — 792×612 пс точек. Так что легко запомнить примерно 800×600 (но более короткий и более широкий). Таким образом,300 400
— это примерно центр страницы (немного высокий, немного слева). -
Не
showpage
вызватьshowpage
. Если вы просматриваете программу ps с помощьюgs
и она не заканчиваетсяshowpage
,gs
может отображать изображение для вас. И все же, файл будет таинственным образом не производить какой-либо выход, когда вы пытаетесь преобразовать в PDF или что-то еще.
учебный план
Прочтите документацию в этом порядке, чтобы легко изучить постскриптум:
-
Отличный учебник Paul Bourke: http://paulbourke.net/dataformats/postscript/
-
Синяя книга, первая половина, оригинальный официальный учебник:
http://www-cdf.fnal.gov/offline/PostScript/BLUEBOOK.PDF -
Зеленая книга, как эффективно использовать постскриптум:
http://www-cdf.fnal.gov/offline/PostScript/GREENBK.PDF -
Мышление в Postscript, ’nuff сказал: http://wwwcdf.pd.infn.it/localdoc/tips.pdf
-
Математические иллюстрации . Начать небольшой, построить большой. Математика за кривыми Безье. Алгоритм обрезки полигона Ходжмана-Сазерленда. Аффинные преобразования и нелинейные преобразования пути. 3D-рисунок и затенение Гуро. Из предисловия:
Который [из многих инструментов, чтобы помочь изготовить математическую графику], по-видимому, подразумевает компромисс между простотой и качеством, в котором большинство из них стремится к тому, что они считают простотой. Правда в том, что компромисс не нужен — как только вы сделали небольшую начальную инвестицию усилий, на сегодняшний день лучше всего делать в большинстве ситуаций — написать программу на графическом языке программирования PostScript. Практически нет предела качеству вывода программы PostScript, и по мере приобретения опыта трудности в использовании языка быстро уменьшаются. Очевидная сложность, связанная с созданием простых фигур при программировании в PostScript, как я надеюсь, эта книга продемонстрирует, в значительной степени иллюзия. И объем работы, связанной с созданием более сложных фигур, обычно не будет ни больше, ни меньше того, что необходимо.
В предыдущей статье я писал, что PostScript стековый язык программирования, но не форт. Строго говоря, это так. Но разница между ними невелика. Эта статья больше памятка для себя, чем толковое описание PostScript.
Postscript — весьма старый язык программирования. И, строго говоря, это не совсем язык программирования. Он был создан в середине 80-х годов фирмой Adobe как универсальный язык управления абстрактным графическим устройством, реальным прототипом которого выступал лазерный принтер. Необходимость такого языка объяснялась маленькой мощностью компьютеров того времени и медленными интерфейсами передачи данных. Сегодня можно сформировать всю страницу для печати на компьютере и передать на печать как растровую картинку. Это почти не нагрузит ни компьютер ни увеличит время печати. Разве что чуть-чуть. Но в те времена у среднего компьютера просто не хватало оперативной памяти, чтобы прорисовать страницу для печати в цвете и с высоким разрешением.
Язык Postscript просто позволял переложить эту работу на специализированный контроллер принтера. Для нас ва жно то, что Postscript не просто язык управления принтером, а язык программирования на котором пишутся программы для принтера. Например, если нужно выполнить простейшую задачу и напечатать лист с линейной разметкой. Язык управления принтером должен направить принтеру указание напечатать столько-то линий на таком-то расстоянии друг от друга. При этом программа на Postscript может просто запустить на принтере цикл и напечатать линовку не отвлекая компьютер.
Одно из важных преимуществ Форта — этот язык одновременно и интерпретируемый и компилируемый. Программировать можно в диалоговом режиме, постепенно развивая словарь для создания нужной программы. Как это делается в других интерпретируемых языках. В качестве среды исполнения программ я использую Ghostscript. Файл “gswin64.exe” как раз запускает интерпретатор языка PostScript
При этом открывается окно Ghostscript Image куда будут выводиться результаты выполнения программы. Я не буду касаться того, как работают стековые языки, а сразу приступлю к описанию параллелей между Форт и Postscript.
Базовые понятия
Path
Я не буду переводить это на русский язык, хорошего аналога нет. Самый подходящий перевод — “контур”, но это слово нигде не используется. Path — это совокупность графических примитивов (линий, дуг, текстовых строк и т.п.). Path группирует эти графические элементы, так что с ними можно проводить общие операции. Например, чтобы нарисовать квадрат, нужно собрать четыре линии образующие стороны квадрата внутри path, тогда для них можно задать единую ширину линий, сделать заливку и т.п. Если каждая линия будет в собственном path, то параметры каждой линии придётсяс задавать отдельно, а выполнить заливку и вовсе не получится.
Есть также специальный clipping path, это path, который задаёт границы в которых можно рисовать. Всё, что рисуется за границами clipping path просто не будет отображаться. По умолчанию clipping path соответствует границам листа. Но это поведение можно и переопределить. В типографском деле clipping path называют “обтравочный контур”, это неплхо знать, но я так называть не буду.
Система коодинат
Язык Postscript изначально предназначен для создания изображений, поэтому система координат — одна из базовых вещей языка. Ситема координат — аппаратно независимая. Например, при рисовании на экране система координат обычно аппаратно-зависимая, т.к. рисование зависит от количества пикселей на области рисования, её разрешающей способности. Используются декартовы координаты, начало координат слева внизу, ось X идёт направо, ось Y — вверх. Базовая единица измерений — “пункт”, равный 1/72 дюйма. Это типографская мера длины. Систему координат можно менять, масштабировать, вращать и т.п. средствами самого языка. Иногда это создаёт удобство при рисовании
Арифметические операции
Арифметические операции задаются словами, а не знаками арифметики. Знаки арифметических операций не рабтают, хотя никто не мешает переопределить слова, чтобы делать операции в привычном виде.
add
— сложение;
sub
— вычитание;
div
— деление. Важное отличие Postscript от Форт в том, что в Postscript базовая арифметика — числа с плавающей точкой. При этом второй элемент стека делится на первый элемент стека.
idiv
— целочисленное деление;
mod
— целочисленный остаток от деления;
neg
— изменение знака числа.
В Postscript используется обратная польская нотация, так что арифметические операции работают в точности так же, как в Форте.
Операции над стеком
Стек — это основная особенность стековых языков программирования, которые включают в себя Форт, Postscript и некоторые другие. Как и в большинстве языков стек используется в режиме LIFO (последним пришёл, первым вышел). Стек используется для хранения данных. Все слова (операторы языка) используют данные, хранимые на стеке. Стек переводится на русский, как стопка. И это лучшая иллюстрация идеи. Представьте, что у вас стопка бумаг, на которых записаны значения, с которыми работает язык. Слово последовательно берёт из этой стопки бумажки, начиная с верхней, прводит необходимые операции и результат этих операций снова записывается на бумажки, которые складываются в стопку. Таким образом, операция
Приведёт к тому, что два числа со стека будут умножены друг на друга, а вместо них будет записан результат умножения 5×100.
clear
— очистка стека;
dup
— удвоение числа на вершине стека;
pop
— удаление числа на вершине стека;
exch
— меняет местами два верхних элемента стека;
roll
— прокручивание стека, при этом два верхних элемента стека — это аргументы операции, верхнее число задаёт сколько элементов и в каком направлении прокручивать, второе число — сколько элементов прокручивать. Таким образом:
7 8 9 3 1 roll --> 9 7 8
7 8 9 3 -1 roll --> 8 9 7
pstack
— печать всего содержимого стека, при этом стек сохраняется;
==
— печать верхнего элемента стека, при этом он удаляется.
Базовые графические операции
Графика в языке Postscript рисуется невидимым “карандашом”. Каждая линия при рисовании — вектор с координатами начала и конца. Но в Postscript принято указывать две координаты — координаты конца линии. Начальная позиция соответсвует последней точке, на которой закончилось рисование предыдущей линии. Слова fill
, stroke
и некоторые другие сбрасывают эту позицию и её нужно задавать заново.
newpath
— этим оператором создаётся новый элемент для рисования, аналог canvas во многих графических средах;
moveto
— позицию начала рисования в координаты x y, координаты берутся с вершины стека. То есть:
144 72 moveto
lineto
— чертит линию в абсолютные координаты x, y заданные на вершине стека.
rlineto
— чертит линию в относительные координаты x, y заданные на вершине стека. Координаты задаются относительно последней точки заданной предыдущими командами графических примитивов или moveto.
setlinewidth
— задаёт ширину линий в пунктах. Пункт — типографская мера длины, 1/72 дюйма.
closepath
— проводит линию от текущей точки рисования до последней точки, заданной оператором moveto. Это позволяет строить аккуратные замкнутые фигуры.
stroke
— отображает всё, что быо нарисовано в newpath, т.к. предыдущие операторы задают графические примитвы, но не отображают их до этой команды;
fill
— делает заливку текущего path.
setgray
— устанавливает цвета в градациях серого.
showpage
— печатает страницу. Это команда для принтера, которая говорит, что вся страница сформирована и пора печатать. Если достаточно посмотреть содержимое страницы на экране — showpage не нужен, а в Encapsulated postscript, который и предназначен для показа на экране, эта команда запрещена. Поскольку мои примеры для вывода на экран, а не на принтер — я не привожу команду showpage дальше по тексту. Просто знайте, если отправляете файл на принтер — showpage добавить нужно.
Таким образом, простейшая программа для рисования квадрата будет такой.
newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
closepath
4 setlinewidth
stroke
Операции с текстом
Язык Postscript и создавался для операций с текстом. Его возможности очень обширны и только некоторые из них будут приведены здесь. Текстовые строки в этом языке обрабатываются как любая другая графика. Ниже приведено несколько примеров по работе с текстом.
Изменение системы координат
Так как в Postscript используется пользовательская система координат — её тоже можно менять.
translate
— переносит начало системы координат в новую точку.
rotate
— позволяет повернуть оси системы координат на заданный угол, он отсчитывается от вертикальной оси против часовой стрелки.
scale
— позволяет изменить масштаб по каждой из координатных осей отдельно, поэтому параметра 2, scaleX и scaleY, масштаб по осям x и y соответственно.
Эта страница даже не пытается быть учебником по языку программирования Postscript. Для этого есть другие ресурсы, где можно найти куда больше информации.
- PostScript Tutorial — на английском языке, но очень краткое и на простом языке. Хотел бы я научиться так писать краткие пособия. Оно написано в 1998 году, но даёт всё необходимую информацию для начала работы.
- Mathematical illustrations — этой книгой можно было бы и ограничиться. Это именно учебник по компьютерной графике на Postscript. от основ языка до трёхмерной графики на Postscript. В книге рассматривается и теория, т.е. уравнения двух и трёх-мерной графики. При этом объём каждой главы довольно невелик, а английский довольно несложен.
- POSTSCRIPT УМЕР ДА ЗДРАВСТВУЕТ PDF?! — статья, где хорошо описана история создания Postscript и его дальнейшая судьба. В статье довольно много информации о недостатках Postscript, но они специфичны для издательского дела. На русском языке.
- Стековые языки — публикация в блоге, которая полностью соответствует названию, она описывает стековые языки. Маленькая статья, но приводит краткие сведения о многих стековых языках. На русском языке.
- Getting started with postscript — хорошее вводное руководство по языку Postscript с полезными сслылками. Документ изначально на английском языке, но поддерживается автоперевод на другие языки, включая русский. Качеество страдает.
- Русскоязычный сайт с материалами о Postscript. Он давно не обновляется, но работает и содержит все необходимые сведения на русском языке.
Подборка исчерпывающая. Из этих ресурсов мы можете узнать о Postscript больше, чем когда-либо хотели бы знать.
Взято с сайта http://xmlhack.ru/aff/andy/ps/
HOME
ВВЕДЕНИЕ
Целью данной темы являются:
- освоение учащимися основ работы с персональным компьютером;
- освоение учащимися навыков навигации по файловой системе;
- освоение учащимися навыков редактирования текста простым текстовым редактором;
- начальные навыки программирования.
СОДЕРЖАНИЕ ТЕМЫ
Текстовая оболочка навигации по файловой системе — Midnight Commander.
Для навигации по файловой ситеме используется текстовая оболочка Midnight Commander. Внешне эта текстовая оболочка похожа на все остальные текстовые оболочки (Norton Commander, Volkov Commander, etc.). Запуск Midnight Commander’а производится командой mc, в окне терминала.
Данная оболочка является настраиваемой. В двух окнах отображается содежимое двух (м.б. различных) каталогов. Оболочка имеет функции подсветки содержимого в зависимости от типа файла, его атрибутов. Каталог «..» означает переход на один уровень вверх. При нажатии клавиши «Enter» на файле с PostScript-программой, происходит автоматический запуск интерпретатора PostScript и отображение на экране данного файла.
Текстовый редактор
Учащимся предлагается использовать текстовый редактор, встроенный в Midnight Commander. Этот текстовый редактор вызывается функциональной клавишей F4, при установленном на файле курсоре оболочке.
Текстовый редактор имеет несколько «горячих» клавиш — F1..F10, назначение которых можно посмотреть на нижней панели редактора. Кроме того, редактор обладает разветвлённым меню, вызываемым функциональной клавишей F9.
Наиболее употребительные операции при редактировании текстового файла:
- вставка символов — производится при включенном режиме «вставка» («insert»). Набираемые символы вставляются на месте курсора, старый текст сдвигается вправо от курсора;
- замена символов — производится с помощью удаления старых (клавиша «Backspace» удаляет символ слева от курсора, клавиша «Del» удаляет символ справа от курсора) и вставки новых символов. Альтернативный способ (редко используемый) состоит в переключении в режим «замены» («Replace»), в котором набираемые символы заменяют собой существующие символы;
- удаление строк — сочетание ctrl-Y или F8;
- вставка строк — «Enter»;
- выделение текста — начинается и завершается нажатием клавиши F3;
- копирование выделенного текста в точку положения курсора — F5;
- перемещение выделенного текста в точку положения курсора — F6;
- удаление выделенного фрагмента текста — F8;
- сохранение изменений — F2;
- выход из редактора — F10.
Как было сказано выше, при нажатии на клавишу «Enter» в Midnight Commander’е, PostScript-программа запускается в интерпретаторе PostScript. Для отображения результата работы программы система запускает стандартный интерпретатор GhostScript и программу отображения GhostView. Программа отображения позволяет просмотреть результат в разных масштабах, распечатать результат на принтере, получить от интерпретатора новую версию отображения.
Интерпретатор и Midnight Commander работают одновременно, не мешая друг другу. Учащиеся могут переключаться между ними клавишами alt+Tab.
Основы языка PostScript
Основные концепции языка PostScript
Язык PostScript изобретён фирмой Adobe corp. в 1985 году. Назначение языка — стандартизация вывода информации, независимость результата вывода от устройства вывода и от программы, этот вывод инициирующей.
Язык PostScript — это язык описания страниц. Описание производится с помощью математических формул и объектов, что даёт абсолютную переносимость описания страницы между платформами и операционными системами. Всё, чем оперирует язык PostScript, — графические объекты, в том числе и текст.
На сегодняшний день язык PostScript является издательским и типографским стандартом. Интерпретаторы языка PostScript встраиваются в большинство бытовых печатных систем. Наличие же интерпретатора PostScript в издательской технике является обязательным.
Язык PostScript использует постфиксную нотацию для записи математических выражений.
Язык PostScript подразумевает, что программа состоит из слов, разделённых разделителями, в роли которых могут выступать пробел, комментарии, табуляция, символы конца строки и страницы. Несколько последовательных разделителей обрабатываются так же, как и один. Комментариями считается всё, начиная от знака % и до конца строки.
Язык PostScript не накладывает ограничений на длину строк или на количество слов в строке.
Стек
Основа языка PostScript — стеки. В рамках данной темы учащимся предлагается усвоить только лишь понятие о стеке операндов, не упоминая остальные стеки языка.
Описание работы стека даётся на примере работы монетницы.
Стек — это особая область памяти, организованная по принципу «последний вошёл — первый вышел».
Учащимся предлагается самим привести примеры стека из жизни. Обычно учащиеся вспоминают: лифт, автоматный магазин, хозяйственную сумку.
Постфиксная нотация.
Язык PostScript использует постфиксную нотацию (обратную запись). Ещё такой способ записи называется «польская запись».
Смысл такого способа записи состоит в том, что сначала записывают операнды, затем — операторы. На примере показываем, как выглядит обычное математическое выражение в постфиксной нотации:
Описываем принцип прочтения обратной записи:
- читаем первое слово («8»); определяем, что это — константа; заносим константу в стек; с краю стека будет находиться константа «8».
- читаем следующее слово («7»); определяем, что это — константа; заносим константу в стек; с краю стека будет находиться константа «7».
- читаем следующее слово («+»); определяем, что это — оператор сложения; выполняем операцию, соответствующую оператору сложения: извлекаем из стека два крайних элемента, находим их сумму и результат помещаем в стек; с краю стека будет находиться сумма 7 и 8 («15»).
- читаем следующее слово («5»); определяем, что это — константа; заносим константу в стек; с краю стека будет находиться константа «5».
- читаем следующее слово («/»); определяем, что это — оператор деления; выполняем операцию, соответствующую оператору деления: извлекаем из стека два крайних элемента, находим их частное и результат помещаем в стек; с краю стека будет находиться результат деления 15 на 5 («3»).
Предлагаем учащимся несколько примеров на самостоятельное построение.
Единицы измерения
PostScript используем свою единицу измерения — пункт (point), обозначаемую пт (pt). В одном стандартном дюйме (inch) помещается 72 пункта (pt).
Как пример перевода длины из миллиметров в пункты, используем подпрограмму cmm учебной программы.
В качестве угловой меры в PostScript используется градус (полная окружность = 360 градусов). Положительное направление отсчёта углов — против часовой стрелки.
Структура PostScript-программы
PostScript-программа имеет в своём составе некие начальные и конечные служебные операторы, и собственно операторы рисования, между ними заключённые. Поскольку изучение служебных инструкций не входит в нашу тему, проговариваем их смысл по учебной программе, только лишь для общего развития, без записи в тетрадях.
Арифметические операторы
В PostScript вместо обычных знаков математических операций используются специальные слова, обозначающие эти математические операции:
Изучаем действие арифметических операторов на примере подпрограммы cmm учебной программы.
Прорабатываем применение арифметических операторов на примерах (самостоятельно):
Графические операторы
Программа может содержать несколько блоков графических операторов. Блок графических операторов называется путь. Внутри блока могут действовать свои графические параметры, действие которых может распространяться, а может и не распространяться за пределы блока.
Смещение начала координат
При открытии страницы начало координат находится в левом нижнем углу. Оператор translate смещает начало координат в указанную точку:
10 20 translate
После выполения этого оператора начало координат сместится в точку (10,20).
Поворот координат
Оператор rotate поворачивает систему координат на произвольный угол (положительное направление — против часовой стрелки):
90 rotate
Поворачивает систему координат на 90 градусов против часовой стрелки.
-90 rotate
Поворачивает систему координат на 90 градусов по часовой стрелке.
Начало нового пути
Графические построения состоят из нескольких этапов:
- инициализация нового графического пути;
- построение графического пути с помощью графических операторов;
- определение типа линии;
- прорисовка линии вдоль построенного пути.
Оператор newpath начинает новый путь.
Завершение пути
После построения пути вдоль него может быть проведена линия. Это осуществляет оператор stroke. Путь, кроме того, можно «закрыть», при этом от текущей точки до первой определённой в пути точки проводится прямая линия. «Закрывает» путь оператор closepath.
Свойства линии
У линии можно задать несколько свойств: толщину, скруглённость хвостиков, пунктирность, цвет и т.д. В нашей теме рассматривается только лишь толщина линии. Толщина линии задаётся оператором setlinewidth:
2.0 setlinewidth
Устанавливает толщину линии 2 пункта (2pt)
Построение линии вдоль пути
После построения пути, с ним можно выполнять различные операции: использовать как маску для дальнейших построений, масштабировать, искривлять и т.д. В нашей теме мы используем построенный путь для вывода линий. Вдоль построенного пути можно нарисовать линии заданных параметров, с помощью оператораstroke.
Смещение текущей точки
Смещение текущей точки можно произвести двумя способами:
Оператор | Синтаксис | Описание |
moveto | x═y═moveto | смещает текущую точку в точку с указанными координатами (x,y) |
rmoveto | dx═dy═rmoveto | смещает текущую точку по вектору с указанными координатами (dx,dy) |
По сути, оператор, начинающийся с буквы r, означает, что передаваемые ему координаты считаются не от начала координат, а от текущей точки.
Примеры:
200 150 moveto
100 32 rmoveto
Построение прямой линии
Оператор | Синтаксис | Описание |
lineto | x═y═lineto | проводит прямую линию от текущей точки в точку с указанными координатами (x,y) |
rlineto | dx═dy═rlineto | проводит прямую линию от текущей точки в точку, отстоящую от неё на указанном расстоянии по горизонтали dx и по вертикали dy (по вектору с указанными координатами) |
После выполнения этих команд, последняя точка прямой линии становится текущей точкой.
Примеры:
201 110 lineto
10 302 rlineto
Построение дуги окружности
Дуга окружности, или окружность, строится оператором arc.
Syntax: x0 y0 R a1 a2 arc
x0 y0 — координаты центра окружности;
R — радиус окружности;
a1 a2 — начальный и конечный угол дуги окружности (0..360).
Угол 0 совпадает с положительным направлением оси OX.
Особенность оператора: если текущая точка пути определена, то от неё до начальной точки дуги проводится прямая линия!
После построения дуги, последняя её точка становится текущей.
Дуга всегда рисуется против часовой стрели, независимо от соответствия углов друг другу. Для проведения дуги в обратном направлении (по часовой стрелке) применяют аналогичный по синтаксису оператор arcn.
Пример:
201 110 22 0 360 arc
Описание учебной программы
В приложении А приведён листинг учебной программы, с пронумерованными строками.
Строки 1-20 и 65-67 содержат начальные и конечные служебные инструкции, соответственно.
Описание некоторых строк программы:
1. Программа написана на языке PostScript, languagelevel 2
2. Создатель
3. Наименование документа
4. Дата создания документа
5. Количество страниц в документе
6. Порядок страниц
9. Подпрограмма перевода длины из миллиметров в пункты
12. Требуемое разрешение устройства вывода
14. Начало страницы 1
22. Сохранение текущих графических настроек
23-59. Операторы построения пути
61. Установим толщину линии
62. Проводим линию с заданными параметрами вдоль построенного пути
63. Восстанавливаем графические настройки
64. Показываем страницу
Задание учащимся
Написать программу, пользуясь учебной программой, которая бы рисовала фамилию, имя и отчество учащегося. Размер буквы — 10 мм на 20 мм, расстояние между буквами — 5 мм.
При необходимости использовать поворот координатной системы (если одно из слов не помещается поперёк листа формата А4.
Учащимся предлагается изменить часть программы, содержащую графические операторы (выделена на примере жирным шрифтом).
Сначала необходимо нарисовать слова, в масштабе 1:1, в рабочей тетради. Затем — составить программу рисования этих слов.
ЗАКЛЮЧЕНИЕ
После выполнения заданий этой темы учащиеся овладевают начальными навыками работы с персональным компьютером, навыками редактирования текста в простом текстовом редакторе, навыками запуска программ из командной строки и из меню графического интерфейса операционной системы.
Результатом является распечатанная работа (фамилия, имя, отчество). Один экземпляр остаётся в классе, один экземпляр выдаётся учащемуся в качестве подарка за успешное освоение темы.
ПРИЛОЖЕНИЕ А — пример PostScript-программы
1. %!PS-Adobe-2.0 2. %%Creator: MAV 3. %%Title: TEST. PU-29 4. %%CreationDate: Sun Jan 12 13:38:48 2003 5. %%Pages: 1 6. %%PageOrder: Ascend 7. %%BoundingBox: 0 0 585 842 8. %%EndComments 9. /cmm { 72.0 mul 25.4 div } def % перевод из миллиметров в пункты 10. %%EndProlog 11. %%BeginSetup 12. %%Feature: *Resolution 600dpi 13. %%EndSetup 14. %%Page: A 1 15. %%BeginSetup 16. % 17. %%BeginFeature: *PageSize A4 18. <</PageSize [595 842] /ImagingBBox null>> setpagedevice 19. %%EndFeature 20. %%EndSetup 21. % начальные служебные инструкции закончены 22. gsave 23. 30 cmm 230 cmm translate % передвинем начало отсчета 24. newpath % начнем новый путь 25. 0 0 moveto % установим начальную точку в начало отсчета 26. 27. % начинаем рисовать буквы "ПУ-29" 28. % ширина буквы - 10 мм, высота буквы - 20 мм, расстояние между буквами - 5 мм. 29. 30. % нарисуем букву "П" 31. 0 cmm 20 cmm rlineto % проводим линию на 20 мм вверх 32. 10 cmm 0 cmm rlineto % проводим линию на 10 мм вправо 33. 0 cmm -20 cmm rlineto % проводим линию на 20 мм вниз 34. 35. % нарисуем букву "У" 36. 5 cmm 0 cmm rmoveto % смещаем текущую точку на 5 мм вправо 37. 10 cmm 20 cmm rlineto % проводим диагональ (10 мм вправо и 20 мм вверх) 38. -10 cmm 0 cmm rmoveto % смещаем текущую точку на 10 мм влево 39. 5 cmm -10 cmm rlineto % проводим диагональ (5 мм вправо и 10 мм вниз) 40. 41. % нарисуем тире 42. 10 cmm 0 cmm rmoveto % смещаем текущую точку на 10 мм вправо 43. 10 cmm 0 cmm rlineto % проводим линию на 10 мм вправо 44. 45. % нарисуем цифру "2" 46. 5 cmm 10 cmm rmoveto 47. 10 cmm 0 cmm rlineto 48. 0 cmm -10 cmm rlineto 49. -10 cmm -10 cmm rlineto 50. 10 cmm 0 cmm rlineto 51. 52. % нарисуем цифру "9" 53. 5 cmm 0 cmm rmoveto 54. 10 cmm 10 cmm rlineto 55. 0 cmm 10 cmm rlineto 56. -10 cmm 0 cmm rlineto 57. 0 cmm -10 cmm rlineto 58. 10 cmm 0 cmm rlineto 59. 60. % буквы нарисовали, далее следуют инструкции отображения пути 61. 2.0 setlinewidth % установим толщину линии 62. stroke % проводим линию устаноленной толщины вдоль построенного пути 63. grestore 64. showpage 65. %%PageTrailer 66. %%Trailer 67. %%EOF
PostScript is a reverse-polish stack-based, dynamically-typed, dynamic-namespacing, scripting language with built-in primitives for generating rendered images from vector descriptions. PostScript employs the same «Adobe Image Model» as the PDF file format.
PostScript is used as an output format by many programs since it is designed to be easily machine-generated.
Like LISP, PostScript is homoiconic and code and data share the same representation. Procedures can take procedures as data and yield procedures as results, lending itself to techniques from concatenative-programming as well.
Installation or Setup
The authentic Adobe PostScript interpreters are available in high-end printers, the Display PostScript (DPS) product, and the Acrobat Distiller product. As authors of the standard, these products are considered «the standard implementation» for the purpose of describing differences among PostScript implementations.
The Standard interface to the interpreter defined in the PLRM is the program-stream which may be either text or binary depending upon the details of the underlying channel or OS/controller. Acrobat Distiller has a GUI front-end to select the input postscript program and render its output as a pdf. Distiller also has some limited support for using the output text stream for reporting errors and other program output. GSView provides a similar GUI front-end for a similar workflow using Ghostscript as the interpreter.
Ghostscript and Xpost both work in a command-line mode. The postscript program file to run can be mentioned on the command-line (gs program.ps
or xpost program.ps
) which will open a graphics window to display the graphical output. Options may be used to render the graphics somewhere else like a disk file or suppress the graphics entirely and use postscript just as a text scripting language.
The various interpreters each have their own installation and setup instructions and it would be wasteful (and prone to falling out-of-date) to reproduce them here.
Freely-available PostScript interpreters
-
Ghostscript is available for all major platforms and Linux distributions, in source or binary form, under the GNU license or under other license arrangements with the authors, Artifex software. Ghostscript implements the full PostScript 3 standard.
-
Xpost is available in source form for all major platforms, under the BSD-3-clause license. It implements the Level-1 standard with some Level-2 extensions and some DPS extensions.
General Description of PostScript
PostScript is a Turing-complete general programming language, designed and developed by Adobe Systems. Many of the ideas which blossomed in PostScript had been cultivated in projects for Xerox and Evans & Sutherland.
Its main real-world application historically is as a page description language, or in its single-page EPS form a vector-graphics image-description language. It is dynamically-typed, dynamically-scoped, and stack-based which leads to a mostly Reverse Polish syntax.
There are three major releases of PostScript.
- PostScript Level 1 — this was released to the market in 1984 as the resident operating system of the Apple LaserWriter laser printer, inaugurating the Desktop Publishing Era.
- PostScript Level 2 — released in 1991, this contained several important improvements to Level 1, including support for image decompression, in-RIP separation, auto-growing dictionaries, garbage collection, Named Resources, binary encodings of the PostScript program stream itself.
- PostScript 3 — the latest and perhaps most widely adopted version was released in 1997. It too contains several import improvements over Level 2 such as Smooth Shading. The term “level” has been dropped.
Though PostScript is typically used as a page description language — and therefore is implemented inside many printers to generate raster images — it can also be used for other purposes. As a quick reverse-polish calculator with more memorable operator names than bc
. As an output format generated by another program (usually in some other language).
Though PostScript file are typically 7-bit-clean ASCII, there exist several kinds of binary encoding described in the level 2 standard. And being programmable, a program may implement its own arbitrarily-complex encoding scheme for itself. There is an International Obfuscated Postscript Competition, somewhat less active than the C one.
Online References
-
Index Pages of Adobe Documentation:
https://www.adobe.com/products/postscript/resources.html
http://www.adobe.com/devnet/postscript.html
http://www.adobe.com/devnet/font.html -
PostScript Language Reference Manual, 3ed — The PostScript 3 standard.
(7.41MB pdf)
(Supplement,
Errata) -
PostScript Language Reference Manual, 2ed — The PostScript Level 2 standard.
(includes Display PostScript documentation.) (3.29MB pdf) -
Postscript Tutorial and Cookbook — The blue book. (847KB pdf)
-
Postscript Language Program Design — The green book. (911KB pdf)
-
Thinking in Postscript — By the author of the green book and the blue-book’s tutorial. (826KB pdf)
-
PostScript Language Document Structuring Conventions Specification 3.0
(521KB pdf) -
Adobe Type 1 Font Format
(444KB pdf) -
Encapsulated PostScript File Format Specification 3.0 (185KB pdf)
-
PostScript Printer Description File Format Specification
4.3
(186KB pdf)
(Update)
-
Troubleshoot PostScript errors — Debugging tips. (158KB html)
-
Acumen Journal — Archive of Postscript and PDF programming articles. (html directory of zipped pdfs)
-
Mathematical Illustrations: A Manual of Geometry and Postscript — by Bill Casselman. (html directory of pdf chapters and code downloads)
-
Thread with many sorting algorithm implementations (usenet archive)
-
Don Lancaster’s Guru Pages
-
Anastigmatix’s Direct use of the Postscript Language
-
Open-source step-wise Debugger for Postscript Code
FAQs
-
Usenet FAQ (circa 1995)
-
Wikibooks PostScript FAQ
-
SO PostScript questions sorted by most-frequently viewed
Books
-
Postscript Language Reference Manual, 1ed, 1985. Recommended for its small size, and easy operator index from the summary pages (missing from later editions).
-
Real World Postscript. Chapters by various authors on various topics, including excellent coverage of halftoning.
Local namespaces for functions
Postscript is a dynamic-namespacing or LISP 1 language. But it provides the tools to implement local variables in procedures and other effects needed to implement algorithms.
For local names in a procedure, make a new dictionary at the start and pop it at the end.
/myproc {
10 dict begin
%... useful code ...
end
} def
You can also combine this nicely with a shortcut to define the function’s arguments as variables.
% a b c myproc result
/myproc {
10 dict begin
{/c /b /a} {exch def} forall
%... useful code yielding result ...
end
} def
If you need to update a *»global» * variable while the local dictionary is on top, use store
instead of def
.
Hello World example
Select a font and fontsize, select location, show
string.
%!PS
/Palatino-Roman 20 selectfont
300 400 moveto
(Hello, World!) show
showpage
Notes and common pitfalls:
-
Failing to set a font (resulting in either no text or a default (ugly) font)
-
Using
findfont
andsetfont
but forgetting toscalefont
in between. Using the level-2selectfont
avoids this problem and is more concise. -
Failing to set a point with
moveto
, or setting the point outside of the page. For US letter paper 8.5×11 is 792×612 ps points. So it’s easy to remember roughly 800×600 (but a smidge shorter and wider). So300 400
is roughly the center of the page (little high, little left). -
Forgetting to call
showpage
. If you preview a ps program withgs
and it does not end inshowpage
,gs
may display an image for you. And yet, the file will mysteriously fail to produce any output when you try to convert to pdf or something else.
Curriculum
Read the documentation in this order to easily learn postscript:
-
Paul Bourke’s excellent tutorial: http://paulbourke.net/dataformats/postscript/
-
Blue Book, first half, the original official tutorial:
http://www-cdf.fnal.gov/offline/PostScript/BLUEBOOK.PDF -
Green Book, how to use postscript effectively:
http://www-cdf.fnal.gov/offline/PostScript/GREENBK.PDF -
Thinking in Postscript, ’nuff said: http://wwwcdf.pd.infn.it/localdoc/tips.pdf
-
Mathematical Illustrations. Start small, build big. The math behind Bezier Curves. The Hodgman-Sutherland polygon clipping
algorithm. Affine transformations and non-linear transformations of the path. 3D drawing and Gouraud shading. From the preface:
Which [of the many tools to help one produce mathematical graphics] to choose apparently involves a trade-off between simplicity and quality, in which most go for what they perceive to be simplicity. The truth is that the trade-off is unnecessary — once one has made a small initial investment of effort, by far the best thing to do in most situations is to write a program in the graphics programming language PostScript. There is practically no limit to the quality of the output of a PostScript program, and as one acquires experience the difficulties of using the language decrease rapidly. The apparent complexity involved in producing simple figures by programming in PostScript, as I hope this book will demonstrate, is largely an illusion. And the amount of work involved in producing more complicated figures will usually be neither more nor less than what is necessary.