stringtranslate.com

Постскриптум

PostScript (часто сокращенно PS ) — это язык описания страниц и динамически типизированный язык программирования на основе стека . Чаще всего он используется в сфере электронных и настольных издательских систем, но как полный по Тьюрингу язык программирования его можно использовать и для многих других целей. PostScript был создан в Adobe Systems Джоном Уорноком , Чарльзом Гешке , Дугом Броцем, Эдом Тафтом и Биллом Пакстоном с 1982 по 1984 год. Самая последняя версия, PostScript 3, была выпущена в 1997 году.

История

Концепции языка PostScript были заложены в 1976 году Джоном Гаффни из компании Evans & Sutherland , [2] [3] [4] компьютерной графики . В то время Гаффни и Джон Уорнок разрабатывали интерпретатор для большой базы данных трехмерной графики Нью-Йоркской гавани .

Одновременно исследователи из Xerox PARC разработали первый лазерный принтер и осознали необходимость в стандартных средствах определения изображений страниц. В 1975–76 годах Боб Спроулл и Уильям Ньюман разработали формат Press, который в конечном итоге использовался в системе Xerox Star для управления лазерными принтерами. Но Press, формату данных, а не языку, не хватало гибкости, и PARC предпринял попытку Interpress создать преемника.

В 1978 году Джон Гаффни и Мартин Ньюэлл , тогда работавшие в Xerox PARC, написали J & M или JaM [2] [5] (от «Джон и Мартин»), который использовался для проектирования СБИС и исследования шрифтовой и графической печати. Позже эта работа развилась и расширилась до языка Интерпресс.

Уорнок ушел вместе с Чаком Гешке и основал Adobe Systems в декабре 1982 года. Они вместе с Дугом Бротцем, Эдом Тафтом и Биллом Пэкстоном создали более простой язык, похожий на Interpress, под названием PostScript, который появился на рынке в 1984 году.

Тем временем весной 1983 года Стив Джобс приехал в гости к Adobe и был ошеломлен потенциалом PostScript, особенно для нового компьютера Macintosh , который он разрабатывал в Apple . [6] К разочарованию Джона Скалли , Джобс лицензировал технологию PostScript у Adobe, предложив аванс в размере 1,5 миллиона долларов в счет гонораров за PostScript, плюс 2,5 миллиона долларов в обмен на 20 процентов акций Adobe. [7] Во время серии встреч в 1983 году Джобс также неоднократно предлагал Apple купить Adobe напрямую, но основатели продолжали ему отказывать. [7] В декабре 1983 года две компании наконец подписали лицензионное соглашение PostScript, и Adobe пришлось немедленно переключить внимание с высококачественных печатающих устройств с высоким разрешением на ориентированный на потребителя лазерный принтер Apple LaserWriter . [8]

В то время механизм лазерной печати Canon с разрешением 300 точек на дюйм, который будет использоваться в LaserWriters, считался достаточно хорошим только для пробной печати (т. е. для грубых черновиков), но Джобс поставил перед Adobe задачу заставить PostScript отображать высококачественный результат. на такое устройство с низким разрешением. [9] В ответ Уорнок и Бротц решили так называемую «проблему внешнего вида»: правильно масштабировать ширину основы букв, чтобы они хорошо выглядели при любом разрешении. [10] Их прорыв был настолько важным, что Adobe никогда не запатентовала эту технологию, чтобы сохранить ее детали в секрете . [10] Пакстон работал над несколькими другими улучшениями, такими как подсказка шрифтов . [10] Adobe также выполнила задачу по портированию PostScript на чип Canon Motorola 68000 . [10]

Apple и Adobe анонсировали LaserWriter на ежегодном собрании акционеров Apple 23 января 1985 года. [11] Это был первый принтер, поставляемый с PostScript, что положило начало революции настольных издательских систем (DTP) в середине 1980-х годов. [12] Сочетание технических достоинств и широкой доступности сделало PostScript предпочтительным языком для графического вывода в приложениях печати. Какое-то время интерпретатор (иногда называемый RIP для процессора растровых изображений) языка PostScript был обычным компонентом лазерных принтеров, вплоть до 1990-х годов.

Однако стоимость реализации была высокой; компьютеры выводят необработанный код PS, который будет интерпретирован принтером в растровое изображение с естественным разрешением принтера. Это требовало высокопроизводительных микропроцессоров и большого объема памяти . В LaserWriter использовался процессор Motorola 68000 с частотой 12 МГц , что делало его быстрее, чем любой из компьютеров Macintosh, к которым он был подключен. [13] Когда сами двигатели лазерных принтеров стоили более тысячи долларов, добавленная стоимость PS была незначительной. Но поскольку механизмы принтеров упали в цене, стоимость внедрения PS стала слишком большой частью общей стоимости принтера. Кроме того, поскольку настольные компьютеры стали более мощными, больше не имело смысла перекладывать работу по растеризации на принтер с ограниченными ресурсами. К 2001 году лишь немногие модели принтеров более низкого уровня имели поддержку PostScript, в основном из-за растущей конкуренции со стороны гораздо более дешевых струйных принтеров, не поддерживающих PostScript, а также новых программных методов рендеринга изображений PostScript на компьютере, что делало их подходящими для любого принтера. . PDF , потомок PostScript, предоставляет один из таких методов и в значительной степени заменил PostScript в качестве фактического стандарта для электронного распространения документов.

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

Постскриптум, уровень 1

Первая версия языка PostScript была выпущена на рынок в 1984 году. Квалификатор Уровень 1 был добавлен вместе с уровнем 2.

Постскриптум уровня 2

PostScript Level 2 был представлен в 1991 году и включал несколько улучшений: повышенную скорость и надежность, поддержку разделения растровых изображений (RIP), декомпрессию изображений (например, изображения JPEG можно было визуализировать с помощью программы PostScript), поддержку составных изображений. шрифты и механизм форм для кэширования повторно используемого контента.

Постскриптум 3

PostScript 3 (Adobe отказался от терминологии «уровня» в пользу простого управления версиями) появился в конце 1997 года и наряду со многими новыми версиями старых операторов на основе словаря представил улучшенную обработку цвета и новые фильтры (которые позволяют сжимать в программе). /decompression, фрагментирование программы и расширенная обработка ошибок).

PostScript 3 имел важное значение с точки зрения замены существующих запатентованных электронных систем допечатной подготовки цвета, которые тогда широко использовались для производства журналов, за счет введения операций плавного затенения с использованием до 4096 оттенков серого (вместо 256, доступных в PostScript Level 2), поскольку а также DeviceN — цветовое пространство , которое позволяло добавлять дополнительные цвета чернил (называемые плашечными цветами ) на страницы составных цветов.

Использование в печати

До PostScript

До появления Interpress и PostScript принтеры были предназначены для печати символьного вывода с использованием текста (обычно в формате ASCII ) в качестве входных данных. [ нужна цитация ] Для этой задачи существовало несколько технологий, но большинство из них обладало тем свойством, что глифы было физически трудно изменить, поскольку они были отпечатаны на клавишах пишущей машинки , металлических полосах или оптических пластинах.

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

Матричные принтеры также представили возможность печати растровой графики . Графика интерпретировалась компьютером и отправлялась на принтер в виде серии точек с использованием серии escape-последовательностей . Эти языки управления принтером различались от принтера к принтеру, что требовало от авторов программ создания множества драйверов .

Печать векторной графики была оставлена ​​на специальные устройства, называемые плоттерами . Почти все плоттеры использовали общий командный язык HPGL , но их применение для чего-либо, кроме печати графики, было ограничено. Кроме того, они, как правило, были дорогими и медленными и поэтому редкими.

PostScript-печать

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

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

PostScript примечателен тем, что реализует растеризацию «на лету» , при которой все, даже текст, задается в виде прямых линий и кубических кривых Безье (ранее встречавшихся только в приложениях САПР ), что допускает произвольное масштабирование, вращение и другие преобразования. При интерпретации программы PostScript интерпретатор преобразует эти инструкции в точки, необходимые для формирования вывода. По этой причине интерпретаторы PostScript иногда называют процессорами растровых изображений PostScript или RIP.

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

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

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

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

Формат шрифта Type 2 был разработан для использования со строками символов компактного формата шрифта (CFF) и был реализован для уменьшения общего размера файла шрифта. Формат CFF /Type2 позже стал основой для обработки контуров PostScript в шрифтах OpenType .

Формат шрифта с ключом CID также был разработан для решения проблем, связанных со шрифтами OCF/Type 0, для решения сложной кодировки азиатского языка ( CJK ) и проблем с очень большим набором символов. Формат шрифта с ключом CID можно использовать с форматом шрифта Type 1 для стандартных шрифтов с ключом CID или с типом 2 для шрифтов OpenType с ключом CID.

Чтобы конкурировать с системой Adobe, Apple разработала свою собственную систему TrueType примерно в 1991 году. Сразу после анонса TrueType Adobe опубликовала спецификацию формата шрифта Type 1. Розничные инструменты, такие как Altsys Fontographer (приобретенный Macromedia в январе 1995 года, принадлежащий FontLab с мая 2005 года), добавили возможность создавать шрифты Type 1. С тех пор было выпущено множество бесплатных шрифтов Type 1; например, шрифты, используемые в системе набора текста TeX , доступны в этом формате.

В начале 1990-х годов существовало несколько других систем для хранения контурных шрифтов, разработанных, например, Bitstream и Metafont , но ни одна из них не включала решение для печати общего назначения, и поэтому они не получили широкого распространения.

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

Другие реализации

В 1980-х годах Adobe получала большую часть своих доходов от лицензионных сборов за внедрение PostScript для принтеров, известного как процессор растровых изображений или RIP . Когда в середине 1980-х годов стал доступен ряд новых платформ на базе RISC , некоторые обнаружили, что Adobe не поддерживает новые машины.

Это, а также проблемы стоимости привели к тому, что сторонние реализации PostScript стали обычным явлением, особенно в недорогих принтерах (где камнем преткновения была лицензионная плата) или в высококачественном наборном оборудовании (где стремление к скорости требовало поддержки новых платформ). быстрее, чем может предоставить Adobe). В какой-то момент Microsoft предоставила Apple лицензию на купленный ею PostScript-совместимый интерпретатор под названием TrueImage , а Apple предоставила Microsoft лицензию на свой новый формат шрифтов TrueType . В итоге Apple достигла соглашения с Adobe и лицензировала подлинный PostScript для своих принтеров, но TrueType стал стандартной технологией контурных шрифтов как для Windows, так и для Macintosh.

Сегодня PostScript-совместимые интерпретаторы сторонних производителей широко используются в принтерах и многофункциональных периферийных устройствах (МФУ). Например, интерпретатор IPS PS3 [14] компании CSR plc , ранее известный как PhoenixPage, входит в стандартную комплектацию многих принтеров и МФУ, в том числе разработанных Hewlett-Packard и продаваемых под линейками LaserJet и Color LaserJet. Другие сторонние решения PostScript, используемые производителями принтеров и МФУ, включают Jaws [15] и Harlequin RIP , оба от Global Graphics . Бесплатная версия программного обеспечения вместе с несколькими другими приложениями — Ghostscript . Несколько совместимых интерпретаторов перечислены на Wiki по недокументированной печати. [16]

Некоторые базовые недорогие лазерные принтеры не поддерживают PostScript, вместо этого поставляются с драйверами, которые просто растрируют собственные графические форматы платформы, а не предварительно конвертируют их в PostScript. Если для такого принтера необходима поддержка PostScript, можно использовать Ghostscript. Существует также ряд коммерческих интерпретаторов PostScript, таких как T-Script от TeleType Co. или BR-Script3 от Brother .

Использование в качестве системы отображения

PostScript стал коммерчески успешным благодаря появлению графического пользовательского интерфейса (GUI), позволяющего дизайнерам напрямую компоновать страницы для последующего вывода на лазерные принтеры. Однако собственные графические системы графических интерфейсов обычно были гораздо менее сложными, чем PostScript; Например, QuickDraw от Apple поддерживал только базовые линии и дуги, а не сложные B-сплайны и расширенные параметры заполнения областей PostScript. Чтобы в полной мере воспользоваться преимуществами печати PostScript, приложениям на компьютерах пришлось повторно реализовать эти функции, используя собственную графическую систему хост-платформы. Это приводило к многочисленным проблемам, когда макет на экране не точно соответствовал печатному выводу из-за различий в реализации этих функций.

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

Однако PostScript был написан с расчетом на печать и имел множество особенностей, которые делали его непригодным для прямого использования в системе интерактивного отображения. В частности, PS был основан на идее сбора команд PS до тех пор, пока showpageкоманда не была увидена, после чего все команды, прочитанные до этого момента, интерпретировались и выводились. В интерактивной системе это было явно неуместно, и в PS не было встроенной какой-либо интерактивности; например, поддержка обнаружения попаданий для интерактивности мыши явно не применялась, когда PS использовался на принтере.

Когда Стив Джобс покинул Apple и основал NeXT , он предложил Adobe использовать PS в качестве системы отображения для своих новых рабочих станций. Результатом стал Display PostScript или DPS. DPS добавил базовую функциональность для повышения производительности, изменив многие поисковые запросы на 32-битные целые числа, добавив поддержку прямого вывода каждой команды и добавив функции, позволяющие графическому интерфейсу проверять диаграмму. Дополнительно был предоставлен набор «привязок» , позволяющий вызывать код PS непосредственно из языка программирования C. NeXT использовала эти привязки в своей системе NeXTStep для создания объектно-ориентированной графической системы. Хотя DPS был написан совместно с NeXT, Adobe продавала его на коммерческой основе, и это была общая особенность большинства рабочих станций Unix в 1990-х годах.

Компания Sun Microsystems применила другой подход, создав NeWS . Вместо концепции DPS, позволяющей PS взаимодействовать с программами на C, NeWS расширила PS до языка, подходящего для запуска всего графического интерфейса компьютера. Sun добавила ряд новых команд для таймеров, управления мышью, прерываний и других систем, необходимых для интерактивности, а также добавила структуры данных и элементы языка, чтобы сделать систему полностью объектно-ориентированной внутри. Полный графический интерфейс, а точнее три, был написан на NeWS и какое-то время использовался на рабочих станциях. Однако продолжающиеся усилия по стандартизации системы X11 привели к ее внедрению и широкому использованию в системах Sun, а NeWS так и не получил широкого распространения.

Портативный формат документов

PDF и PostScript используют одну и ту же модель изображения, и оба документа взаимно конвертируются друг в друга. Оба документа при печати дают одинаковый результат. Разница между PDF и PostScript заключается в том, что в PDF отсутствует универсальная среда программирования языка PostScript. PDF-документ представляет собой статическую структуру данных, созданную для эффективного доступа и включающую навигационную информацию, подходящую для интерактивного просмотра. [17] : 9 

Язык

PostScript — это полный по Тьюрингу язык программирования, принадлежащий к конкатенативной группе языков программирования. Это интерпретируемый язык на основе стека , похожий на Форт , но со строгой динамической типизацией , структурами данных, вдохновленными теми, что есть в Лиспе , ограниченной памятью и, начиная с уровня языка 2, сборкой мусора . В синтаксисе языка используется обратная польская нотация , что делает порядок операций однозначным, но чтение программы требует некоторой практики, поскольку приходится помнить о структуре стека . Большинство операторов (которые в других языках называются функциями ) берут свои аргументы из стека и помещают в него результаты. Литералы (например, числа) помещают свою копию в стек. Сложные структуры данных могут быть построены на основе типов массива и словаря , но не могут быть объявлены в системе типов, которая рассматривает их все только как массивы и словари, поэтому любые дальнейшие правила типизации, которые будут применяться к таким определяемым пользователем «типам», оставляются. к коду, который их реализует.

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

Обычно программы PostScript создаются не людьми, а другими программами. Однако на PostScript можно писать компьютерные программы, как и на любом другом языке программирования. [18]

"Привет, мир"

Программа Hello World , обычный способ показать небольшой пример полной программы на данном языке, может выглядеть в PostScript (уровень 2) следующим образом:

 %!PS /Courier % назовите нужный шрифт 20 selectfont % выберите размер в пунктах и ​​установите % шрифт как текущий 72 500 moveto % позиционируйте текущую точку в % координаты 72, 500 (начало координат % ниже- левый угол страницы) (Привет, мир!) show % закрасьте текст в скобках showpage % распечатайте все на странице                 

или если устройство вывода имеет консоль

 %!PS (Привет, мир!) =  

Единицы длины

PostScript использует точку в качестве единицы длины. Однако, в отличие от некоторых других версий точки, PostScript использует ровно 72 точки на дюйм. Таким образом:

1 балл =1/72дюйм =25,4/72мм =127/360мм = 352,777… микрометров

Например, чтобы нарисовать вертикальную линию длиной 4 см, достаточно набрать:

0 0 moveto 0 113.385827 rlineto инсульт      

Более читабельно и идиоматично можно было бы использовать следующий эквивалент, который демонстрирует простое определение процедуры и использование математических операторов mulи div:

/cm { 72 mul 2,54 div } def % 1 дюйм = 2,54 см ровно 0 0 moveto 0 4 см rlineto штрих              

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

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

Программное обеспечение

Список программного обеспечения, которое можно использовать для рендеринга документов PostScript:

Смотрите также

Рекомендации

  1. ^ Перри, TS (май 1988 г.). "«PostScript» печатает что угодно: история болезни». IEEE Spectrum . 25 (5): 42–46. doi : 10.1109/6.4550. S2CID  33376390.
  2. ^ Аб Рейли, Эдвин (2003). Вехи в области компьютерных наук и информационных технологий. Издательская группа Гринвуд. п. 206. ИСБН 9781573565219.
  3. Петерсон, Дж. К. (28 июня 2018 г.). Иллюстрированный словарь по волоконной оптике . Группа Тейлор и Фрэнсис. ISBN 9781138455757.
  4. ^ Нгуен, Бинь (2004). Словарь Linux (изд. 0,16). Бинь Нгуен. Архивировано из оригинала 24 февраля 2021 года . Проверено 28 сентября 2019 г.
  5. ^ Бьянкуцци, Федерико; Надзиратель, Шейн (2009). «Глава 16. Постскриптум». Мастера программирования . O'Reilly Media, Inc. ISBN 9780596515171.
  6. ^ Пфиффнер, Памела (2003). Внутри издательской революции: история Adobe . Беркли: Peachpit Press. п. 33. ISBN 0-321-11564-3.
  7. ^ аб Пфиффнер, Памела (2003). Внутри издательской революции: история Adobe . Беркли: Peachpit Press. п. 34. ISBN 0-321-11564-3.
  8. ^ Пфиффнер, Памела (2003). Внутри издательской революции: история Adobe . Беркли: Peachpit Press. п. 35. ISBN 0-321-11564-3.
  9. ^ Пфиффнер, Памела (2003). Внутри издательской революции: история Adobe . Беркли: Peachpit Press. п. 36. ISBN 0-321-11564-3.
  10. ^ abcd Пфиффнер, Памела (2003). Внутри издательской революции: история Adobe . Беркли: Peachpit Press. п. 37. ИСБН 0-321-11564-3.
  11. ^ Пфиффнер, Памела (2003). Внутри издательской революции: история Adobe . Беркли: Peachpit Press. п. 47. ИСБН 0-321-11564-3.
  12. ^ Пфиффнер, Памела (2003). Внутри издательской революции: история Adobe . Беркли: Peachpit Press. п. 48. ИСБН 0-321-11564-3.
  13. ^ Пфиффнер, Памела (2003). Внутри издательской революции: история Adobe . Беркли: Peachpit Press. п. 53. ИСБН 0-321-11564-3.
  14. ^ IPS PS3, CSR, заархивировано из оригинала 24 июля 2012 г.
  15. ^ Челюсти, Глобальная графика, заархивировано из оригинала 6 марта 2016 г. , получено 13 июня 2012 г.
  16. ^ «Языки описания страниц: Postscript», Форматы, Недокументированная печать, заархивировано из оригинала (вики) 05 ноября 2017 г. , получено 15 декабря 2009 г.
  17. ^ Adobe Systems (1999). Справочник по языку PostScript (PDF) (3-е изд.). Ридинг, Массачусетс: Аддисон-Уэсли. ISBN 0-201-37922-8. OCLC  40543937. Архивировано (PDF) из оригинала 24 октября 2022 г. Проверено 14 августа 2022 г.
  18. ^ Библиотека PostScript. Архивировано 2 октября 2023 г. в Wayback Machine . Логово гуру Дона Ланкастера.

дальнейшее чтение

Внешние ссылки