Постскрипт -- это язык программирования полиграфической продукции, печатаемой на специальных принтерах, которые так и называются -- постскрипт принтерами. Этот язык был первым продуктом фирмы Adobe, с него эта фирма и начала свое существование. Сейчас эта фирма более известна другим своим языком -- PDF, и многочисленными программами работы с графикой, в частности Adobe Photoshop. Историю создания языка и его авторов я описывать не буду, эту информацию можно легко найти в интернете. Идея состояла в том, чтобы создать простой текстовый поток информации, не зависящий от операционной системы или типа компьютеров, который бы содержал абсолютно полное описание полиграфической продукции. Такая задача существовала с момента книгопечатания, но именно в эпоху компьютеров и принтеров, а также локальных сетей, она стала особенно актуальной. Естественно, эта задача решалась и продолжает решаться разными способами. Постскрипт, как язык программирования является одним из таких решений. Сейчас даже нет смысла обсуждать -- лучшее это решение или нет, постскрипт является почти стандартом и очень широко используется в разных аспектах. Среди менее универсальных, но более простых систем, можно указать на язык TeX и LaTeX. Но эта система в основном упрощает набор формул, а рисунки она принимает именно в языке постскрипт и фактически сама является одним из многочисленых постскрипт генераторов. Более того, практически все программы, работающие с графикой, способны генерировать постскрипт файлы.
Пожалуй самым важным обстоятельством для России является то, что существует бесплатный и достаточно мощный интерпретатор языка постскрипт в виде программы Ghostscript и оконная оболочка этого интерпретатора в виде программы Gsview. Обе эти программы, объединенные вместе, удобно назвать Gstools. Последние версии программ можно скачать с сайта [1]. К сожалению, развитие этих программ прекращено на 9-й версии Ghostscript. Со временем они стали требовать регистрации и их надо устанавливать. Иногда это неудобно. У меня сохранилась установленная старая версия тандема (Ghostscript 5.50 и Gsview 2.6), которая не требует регистрации, установки и может работать даже с USB флашки на любом компьютере. Она имеет меньший объем, но пригодна для показа практически всех постскрипт файлов, которые можно будет создавать, изучив данную инструкцию. Архив программы gs550.zip одним файлом можно скачать по ссылке [2].
Именно наличие этой программы и делает постскрипт удобным средством создания графики, поскольку постскрипт принтеры в России не нашли распространения и главной целью остается получение растровых изображений. В архиве находятся две папки, которые содержат все что нужно. Главная программа - файл gsview32.exe в папке gsview. При первом запуске она сама предложит связать файлы с расширениями ps и eps с ней. Достаточно согласиться и все. Но в последних версиях Виндовс программе не дают делать изменения в регистрах, так что самоустановки не получится. Программа работает так, как будто любой ее запуск является первым. Но важно, что она работает, хотя и создана еще в прошлом веке. Программа gsview показывает графику, описываемую постскрипт файлом, в виде растровой картинки на экране монитора и может напечатать ее на любом принтере. Важно, что можно задать ЛЮБОЕ разрешение и скопировать картинку в любую программу обычными средствами, используя клавиши [Ctrl]+[C] и [Ctrl]+[V]. Процедура работы обычно состоит в том, что открываются два окна. В одном ps файл открывается в текстовом редакторе, в другом - в программе gsview. В текстовом редакторе файл создается, в окне gsview - он показывается в виде растровой картинки (исполняется). Достаточно изменить содержание файла и картинка перерисовывается автоматически. То есть фактически не нужно никакой среды разработки - сама оконная операционная система Виндовс является отличной средой разработки.
Есть и другие способы работы. Можно открыть много файлов и копировать в новый ps файл целые куски текста с описанием готовых объектов. А можно открыть другую программу, которая по параметрам, задаваемым в окнах ввода сама будет генерировать постскрипт файл и его останется только посмотреть. Программы, которые генерируют постскрипт файлы автоматически, будем называть постскрипт-генераторами. При использовании таких программ даже не надо учить язык программирования постскрипт. Но в том то и дело, что постскрипт -- уникальный язык. Какие-то объекты в нем удобнее создавать через постскрипт-генераторы, а какие-то намного эффективнее создавать программированием. И в принципе любой постскрипт-генератор разрешает вставку готового фрагмента постскрипт кода. Я взялся писать инструкцию по языку постскрипт именно потому, что моя универсальная программа vkACL -- интерпретатор языка ACL и проигрыватель многочисленных готовых ACL программ, содержит также и готовый постскрипт-генератор, как в виде команды языка ACL, так и в оконном виде (программа EPS fig). Поэтому знание самого языка необходимо только для описания особенно сложных объектов, которые автоматически не создаются. Соответственно инструкция будет дополнена нужными сведениями для работы с программой EPS fig. Есть и другие программы и еще будут.
Итак, язык постскрипт является универсальным, независимым от прибора, языком программирования низкого уровня. Это означает, что он имеет очень много (более 400) операторов, каждый из которых выполняет какую-либо примитивную функцию. Язык разработан таким образом, чтобы было удобно написать интерпретатор к нему, чтобы интерпретатор был достаточно простым и быстро работал. А вот удобство для программиста как раз не предусматривалось. Соответственно необходимо некоторое время на привыкание к идеологии языка, потому что она не столь очевидна. Собственно говоря, создатели языка постскрипт и не предполагали, что много людей будет на нем программировать. Считалось, что к этому языку надо создавать языки программирования более высокого уровня и что специальные программы будут переводить из языка высокого уровня в язык низкого уровня. Как я уже отмечал, так в основном и делается. По этой причине литературы с описанием языка совсем не много.
Главная книга издана только на английском и не переводилась. Она называется "Postscript Language Reference. Third Edition. Adobe Systems Incorporated (Addison-Wesley Publishing Company, 1999)". В книге 897 страниц. Я был очень удивлен, когда обнаружил, что можно было бесплатно скачать электронную версию этой книги. Но время прошло и все изменилось, теперь не так. Теперь можно скачать мою версию по ссылке [3]. Пока так. Если и это перестанет работать, придумаем еще что-нибудь. Есть и другие книги и сайты [3-8]. Я указал только те ссылки, которые еще работают к моменту последнего редактирования сайта. Были и другие ссылки, но они слетели и книги надо искать заново. Все указанные книги разумно начинать читать, если вам что-то не хватит в данной книге, которую я как раз и предлагаю прочитать.
В конце этой главы я расскажу об общей структуре файлов с кодом на языке постскрипт. В самом языке практически не предусмотрено никакой структуры. Однако программа Gstools лучше работает, если ей сообщить кое-какие сведения дополнительно к языку. Эти сведения передаются через комментарии специального вида. Так как программа не компилируется, а сразу выполняется, то она имеет большую свободу в движениях. В частности, программа может вводить сокращенные обозначения для автономных кусков кода произвольной длины и затем вместо кода вставлять только эти обозначения. Такие конструкции принято называть процедурами и они позволяют создавать язык высокого уровня в самом постскрипт файле. Далее, интерпретатор может читать текст с командами языка пропуская комментарии. Комментарий начинается на любой строке символом % (процент) и заканчивается концом строки. Специальные комментарии начинаются с начала строки и имеют два символа %. Вот типичный пример структуры многостраничного ps-файла
%!PS-Adobe-3.0
%%Title: название проекта
%%Creator: создатель файла
%%CreationDate: дата_и_время_создания
%%For: указание для кого создан файл
%%Copyright: фирма или автор, имеющий права на файл
%%Document fonts: имена используемых фонтов
%%BoundingBox: 0 0 596 843
%%Pages: 10
%%EndComments
%%BeginProcSet
текст процедур
%%EndProcSet
%%EndProlog
%%Page 1 1
команды описания первой страницы
showpage
%%Page 2 2
команды описания второй страницы
showpage
и так далее
%%Trailer
%%EOF
Итак, в первой строке ставится указание на то, что это постскрипт файл. Так удобнее отличить файл от других типов. Далее можно поставить информацию типа названия проекта, создателя файла, даты создания, владельца прав на файл, можно указать фонты, а также размер страницы и число страниц. Все это не обязательно, но обычно делается постскрипт-генераторами для удобства. За разделом Комментария следует раздел Пролога. Он обычно содержит описания всех процедур, которые используются в файле. Это не значит, что абсолютно все процедуры должны быть здесь. Можно их и потом писать. Но удобно, когда все в одном месте -- понятно где искать. Ну и постскрипт-генераторы обычно заранее знают все процедуры, которые они используют, поэтому это просто копируется. За разделом Пролога следует раздел собственно программы, которая описывает графическое содержание всех страниц по очереди. Ну и в конце можно записать Эпилог.
Важное значение имеет строка, указывающая размер страницы: BoundingBox: 0 0 596 843. В ней указываются координаты левого нижнего и правого верхнего углов страницы. Вообще-то для многостраничного файла программа Gstools игнорирует этот комментарий и может сама устанавливать размер страницы. Но все же эта информация полезна. Как уже сказано, координаты отсчитываются от левого нижнего угла направо и вверх. Единицами имерения являются пункты pt, в которых обычно указываются размеры шрифтов. 1 pt = 0.353 мм, стандартный лист бумаги размером A4 имеет размеры 596 х 843 pt. Американцы все измеряют в дюймах, так что 1" = 2.54 см = 72 pt. При задании координат точек это нужно учитывать, хотя не стоит большого труда поменять единицы измерения сразу в начале файла.
Многостраничный постскрипт файл может описать хоть целую книгу. Однако, для многих целей важно иметь описание одной картинки, которое можно было было бы вставить как кирпич в другие системы. Для этого структура файла несколько изменяется. Файл имеет расширение eps и называется encapsulated postscript file. Его структура несколько попроще, а именно,
%!PS-Adobe-3.0 EPSF-3.0
%%BoundingBox: 20 20 800 600
%%EndComments
%%BeginProcSet
текст процедур
%%EndProcSet
%%EndProlog
gsave
команды описания картинки
grestore
showpage
%%Trailer
%%EOF
Здесь к первой строке добавляется комментарий с указанием на инкапсулированный постскрипт. Важное значение имеют размеры отображаемой области, так как программа Gsview имеет опцию EPS Clip, по которой картинка будет показана только в пределах указанных границ. Также поступают при вставке файла с картинкой в файлы формата Латех. Нужно, однако понимать разницу. При вставке файла в другой постскрипт файл или в Латех команду showpage следует убрать. А при показе файла программой Gsview она должна присутсвовать. Так что файл следует предварительно редактировать в зависимости от того где он используется.
Итак это все, что можно сказать предварительно. В следующей главе мы перейдем к непосредсвенному программированию. Так как операторов (команд) в языке более 400, то мы начнем с самых важных, которые необходимы для создания простых рисунков. Собственно одну команду мы уже написали. Это showpage. Эта команда указывает интерпретатору, что больше команд не будет и страница полностью описана, и приказывает начать переводить описание в растровую картинку, которая и будет показана на экране. Еще одно общее замечание касается написания программы. Язык Постскрипт более распространен в OC UNIX. Видимо по этой причине, он использует весь арсенал символов, то есть большие и маленькие символы означают разное. Кто привык к фортрану и ДОС должен это хорошо запомнить.
В заключение этой главы хочу обсудить еще одну проблему. В настоящее время для описания документов чаще используется язык PDF (portable data file). В этом языке информация не всегда представлена текстом, более того, он допускает внутреннее сжатие файла. Файлы PDF намного более компактные, по сравнению с PS, если речь идет об описании растровых изображений. В действительности это обманчивое улучшение. Для передачи ps-файла по интернету его можно заархивировать, например, в виде zip-архива и тогда он очень хорошо сжимается. Но надо считаться с установившимся порядком вещей, по которому все документы сохраняются в PDF формате. Выход из положения очень простой. Он состоит в том, что сначала с помощью текстового редактора создается и редактируется ps-файл, а потом используется стандартная программа перекодировки ps-файла в pdf-файл.
Например, программы ps2pdf.exe и epstopdf.exe существуют в рамках бесплатного дистрибутива программы МикТех. Ее можно скачать в интернете по адресу [9]. Эта программа очень большая, хотя в рамках возможностей современных компьютеров это не важно. Но для русского языка ее надо настраивать. Я могу предложить [10] свою версию 2.8 программы МикТех, которая уже настроена и сразу работает на русском языке. Достаточно скачать архив, вынуть папку и все, можно работать.
Есть также проблема перекодировки ps-файла в растровый рисунок форматов jpg или png. Это актуально только для eps файлов, то есть одностраничных файлов картинок. Такие конверторы тоже существуют, но я лично использую свою программу vkSM.jar, которая берет картинку с экрана дисплея и записывает ее в файл в указанных форматах. Все мои программы описаны на моем персональном сайте, ссылка есть в верхней строке сайта. Именно так сделаны все картинки, которые показываются в этой книге. Однако есть и много онлайн программ перекодировки любых форматов в любые другие. Ссылок не даю, их легко найти поиском в Яндексе или Гугле.
Литература
[1] http://pages.cs.wisc.edu/~ghost/gsview/
[2] Архив программ Ghostscript-550 и GsView-260
[3] Электронная книга о постскрипте PLRM.pdf, 1999
[4] Электронная книга о постскрипте PSGreenBook.pdf, 1988
[5] A First Guide to PostScript, 2006
[6] Сайт Андрея Фурашева
[7] Mathematical Illustrations
[8] Encapsulated PostScript Clip Art Library
[9] Последняя версия программы МикТех
[10] Моя версия программы МикТех