PostScript керівництво

Written by Paul Bourke
Original November 1990. Last updated December 1998

Translation into Bulgarian by Albert Ward.
This Ukrainian translation provided by Dmutro Nechuporyk, November 2015.

Reference manual


Введення

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

Наступна інформація призначена в якості першого уроку в мові PostScript. Це буде зосередитися на тому, щоб використовувати постскриптум для створення графіки, а не досліджувати її як мову програмування. До кінця ви повинні відчувати себе впевнено про написання простих програм для малювання постскриптума графіку і текст. Додаткова інформація та повна специфікація мови може бути отримана з The Postscript Language Reference Manual від Adobe Systems Inc, опублікованій Reading, Massachuchusetts, 1985.

Навіщо вивчати постскриптум, зрештою, багато програм можуть генерувати його для вас і драйвери PostScript друку можна надрукувати у файл? Деякі причини можуть бути:

  • Маючи прямий вихід постскриптума часто може привести до набагато більш ефективному припискою, PostScript, який друкує швидше, чим більш спільний вихід із драйверів принтера.
  • Є багато випадків, коли генерації PostScript безпосередньо можуть привести до набагато більш високої якості. Наприклад, коли малюнок багато типів фракталів, де потрібна висока дозвіл необхідно, будучи в змозі залучити рідною високою роздільною здатністю в PostScript-принтера бажано.
  • Це не рідкість для комерційних пакетів, щоб зробити помилки з їх виходом PostScript. Будучи в стані дивитися на постскриптумі і зробити деякий сенс того, що відбувається на іноді може дати уявлення про те, як виправити цю проблему.

Основи

Postscript файли (в цілому) текстові файли і як такі вони легко можуть бути отримані вручну або як вихід написана користувальницьких програм. Як і в більшості мов програмування, PostScript файли (програми) призначені, щоб бути, принаймні, частково, для сприйняття людиною. Як такі, вони, як правило, вільний формат, тобто, текст може бути розділений на декілька рядків і відступом, щоб виділити логічну структуру.
Коментарі можуть бути введені в будь-якому місці в межах припискою файлу з відсотка (%) символу, коментар не застосовується з% до кінця рядка.
Хоча не частина постскриптума описі першому рядку файлу постскриптума часто починається в % ! Це пояснюється тим, що черга друку та інше програмне забезпечення друку виявити, що файл є інтерпретується як постскриптум замість звичайного текстового файлу. Рядний приклад нижче, не буде включати в себе це, але постскриптум файли, пов’язані з цієї сторінки буде включати його, так як вони є дизайн для прямого друку.
Перша команда приписка, щоб дізнатися про це показати сторінку, це змушує принтер, щоб роздрукувати сторінку з тим, що в даний час звертається на ньому. Приклади наведені нижче друк на окремі сторінки і, отже, є показати сторінку в кінці файлу в кожному прикладі, побачити коментарі пізніше щодо EPS.

Шлях

Шлях являє собою набір, можливо, відключених ліній і областей, що описують зображення. Шлях сама не звертається, після того, як вказана, то можна погладив (рядки) або заповнені (області), що робить відповідні відмітки на сторінці. Існує особливий тип шляху називається шлях відсікання, це шлях, протягом якого майбутній малюнок обмежені. За замовчуванням шлях відсікання є прямокутник, який відповідає кордон папери, що не будуть змінені під час цього уроку.

Стек

Постскриптум використовує стек, інакше відомий як LIFO (останній First Out) стек для зберігання програм і даних. Постскриптум перекладача поміщає програму постскриптума в стеку і виконує його інструкції, які вимагають дані будуть читати, що дані з стека. Наприклад, існує оператор в PostScript для множення двох чисел, mul. він вимагає два аргументи, а саме два числа, які повинні бути помножені разом. У постскриптумі це може бути визначене як

10 20 mul

Перекладач б розмістити 10 і потім 20 в стек. Оператор мул буде видалити 20 а потім 10 з стека, помножте їх разом і залишити результат, 200, в стеку.

Система координат

Постскриптум використовує систему координат, яка апаратно-незалежна, тобто, вона не залежить від дозволу, розміру паперу тощо кінцевого пристрою виводу. Початкова система координат має вісь х вправо і по осі Y вгору, походження, розташованих у нижньому лівому кутку сторінки. Блоки мають «точок», які 1/72 дюйма завдовжки. Іншими словами, якщо ми малюємо лінію від припискою координат (72,72) і (144,72), ми будемо мати рядок, що починається на один дюйм в від лівої і правій частині сторінки, лінія буде горизонтальна і бути один дюйм довго.

Система координат може бути змінено, що, масштабується, обертається, і переведені. Це часто робиться, щоб сформувати більш зручну систему для конкретного малюнок створюється.

Основні команди для малювання

Час намалювати що-небудь. Нижче складається з декількох операторів і даних, деякі оператори, такі як новий шлях не потрібно аргументів, інші, як LineTo два аргументи з стека. Всі приклади в цьому тексті показані як постскриптум зліва з отриманого зображення праворуч. Текст зліва також виступає в якості посилання на друку як файл postscript.

newpath
100 200 moveto
200 250 lineto
100 300 lineto
2 setlinewidth
stroke

Є також відносні moveto і lineto команди, а саме, rmoveto і rlineto.

У наступному прикладі заповнений об’єкт буде звернено в певний відтінок, і для контуру та інтер’єру. Відтінки варіюються від 0 (чорний) до 1 (білий). Зверніть увагу на closepath, який з’єднує перший вершину шляху з останнім.

newpath
100 200 moveto
200 250 lineto
100 300 lineto
closepath
gsave
0.5 setgray
fill
grestore
4 setlinewidth
0.75 setgray
stroke

Креслення команди, такі як інсульт та заповнити знищити поточний шлях, шлях навколо цього є використання gsave, що зберігає поточний шлях, так що він може бути відновлений з grestore.

Текст

Текст, мабуть, найскладніший і потужний аспект постскриптумі, як такий лише частину своїх можливостей обговорюватимуться тут. Одна з приємних речей є те, що спосіб символи, поміщені на сторінці не відрізняється від будь-якої іншої графіки. Інтерпретатор створює шлях для персонажа і потім або гладити або заповнені як звичайно.

/Times-Roman findfont
12 scalefont
setfont
newpath
100 200 moveto
(Example 3) show

Як і слід було очікувати положення (100,200) вище визначає положення в лівому нижньому кутку текстового рядка. Перші три рядки в наведеному вище прикладі це прибирання, що повинно бути зроблено в перший раз шрифт використовується. За замовчуванням розмір шрифту становить 1 пункт, то scalefont встановлює розмір шрифту в одиницях точок (1/72 дюйма). У дужки слів “Example 3” вказують, що це рядок.

Трохи змінена версія вище застосувань charpath для лікування символи в рядку в дорозі, який може бути гладив або заповнені.

/Times-Roman findfont
32 scalefont
setfont
100 200 translate
45 rotate
2 1 scale
newpath
0 0 moveto
(Example 4) true charpath
0.5 setlinewidth
0.4 setgray
stroke


Колір
Ви повинні переконатися, що ви розумієте, порядок зазначених операторів і, як наслідок орієнтації і масштаб тексту, процедурно він звертає текст, масштабувати вісь у з коефіцієнтом 2, поверніть його проти годинникової стрілки навколо початку координат, нарешті, перевести систему координат в (100,200).

Для тих, хто з кольоровими LaserWriters головний інструкція інтерес, який замінює setgray це попередні приклади є setrgbcolor. Це вимагає 3 аргументу, червоний-зелений-синій компоненти кольору кожен коливається від 0 до 1.

newpath
100 100 moveto
0 100 rlineto
100 0 rlineto
0 -100 rlineto
-100 0 rlineto
closepath
gsave
0.5 1 0.5 setrgbcolor
fill
grestore
1 0 0 setrgbcolor
4 setlinewidth
stroke

Як уже згадувалося у введенні припискою це мова програмування. Розширити цієї мови не будуть покриті тут винятком, щоб показати деякі приклади процедур, які можуть бути корисні для спрощення постскриптума покоління і зробити постскриптум файли менше.

Програмування

Давайте припустимо, один, необхідної для підготовки багато квадратів з не кордони, але наповнений певного кольору. Можна створити шлях повторно для кожного з них, в якості альтернативи можна було б визначити щось на кшталт такого.

/csquare {
   newpath
   0 0 moveto
   0 1 rlineto
   1 0 rlineto
   0 -1 rlineto
   closepath
   setrgbcolor
   fill
} def

20 20 scale

5 5 translate
1 0 0 csquare

1 0 translate
0 1 0 csquare

1 0 translate
0 0 1 csquare

Ця процедура малює три кольорові квадратів поруч один з одним, кожен 20/72 дюйма квадратних, зверніть увагу, масштаб 20 на системі координат. Процедура малює одиничний квадрат і очікує, що колір RGB, щоб бути в стеку. Це може бути використано в якості методу (хоча неефективними) малювання растрове зображення.

Навіть якщо просто малюнок багато ліній на сторінці, з тим щоб зменшити розмір файлу Як правило, щоб визначити процедуру, як показано нижче. Це просто визначає один символ “L”, щоб намалювати відрізок, то можна використовувати такі команди, як 100 200 200 200 л “намалювати відрізок від (100,200) до (200,200).

/l { newpath moveto lineto stroke } def

Деякі корисні команди інших

Нижче наведені деякі інші часто використовувані команди разом з коротким описом, ви знову повинні проконсультуватися довідкове керівництво для всього набору команд.

arc Малює дугу (у тому числі по колу). Аргументи х-центр, у-центр, радіус, кут початку, кут зупинки. Дуга малюється проти годинникової стрілки, кути в одиницях градусів.

currentpoint Це приклад команди, яка не приймає ніяких аргументів, але залишає номера в стеку, а саме координат поточної точки.

setdash Це встановлює тире атрибут лінії з погляду знак простору масиву. Так само, як струни позначаються круглими дужками (), масиви позначаються квадратні дужки []. Наприклад, наступну команду “[3 3] 0 setdash” буде робити які-небудь наступні рядки мають 3 одиниці тире з подальшим 3 одиниці простору. Аргумент після масиву тире зміщення для початку першого тире.

setlinecap Це визначає те, що кінці лінії погладив виглядати. Вона приймає один аргумент, який може бути 0 (стикові ковпачки), 1 (круглі шапки), або 2 (розширені шапки стикові). Радіус круглих кришок і розширення стикових кришок визначається товщиною лінії.

/LINE {
   newpath
   0 0 moveto
   100 0 lineto
   stroke
} def

100 200 translate
10 setlinewidth 0 setlinecap 0 setgray LINE
1 setlinewidth 1 setgray LINE

0 20 translate
10 setlinewidth 1 setlinecap 0 setgray LINE
1 setlinewidth 1 setgray LINE

0 20 translate
10 setlinewidth 2 setlinecap 0 setgray LINE
1 setlinewidth 1 setgray LINE

setlinejoin Це визначає появу з’єднують ліній. Вона приймає один аргумент, який може бути 0 (митра), 1 (круглий), приєднатися або 2 (конічні з’єднання).

/ANGLE {
   newpath
   100 0 moveto
   0 0 lineto
   100 50 lineto
   stroke
} def

10 setlinewidth
0 setlinejoin
100 200 translate
ANGLE

1 setlinejoin
0 70 translate
ANGLE

2 setlinejoin
0 70 translate
ANGLE

curveto Це приваблює криву безьє, обумовлену трьома крапками заданих в якості аргументів. Крива починається в поточній точці, закінчується в останній момент, і дотичні дані по лінії між першим другий і другий-третій пари.

save Замість того, щоб “скасувати” зміни в графіки стані можна за допомогою команди зберегти, щоб підштовхнути весь графіком

restore заявити в стек, а потім переустановити його з відновлення.

Малюнок “маленькі” зображення

Друк зображення за допомогою постскриптум дещо складніше, ніж графіки обговорювали досі. Приклади двох типів зображень будуть представлені, півтонових зображень (які також можуть бути використані для чорно-білих зображень) і 24 біт RGB зображення.

8 Bit Grey Scale

Найпростіший метод, який застосовується на малих зображень команда приписка image. Це займе 5 аргументу: ширина і висота зображення, біти на піксель, матриця перетворення (6 номерів) і, нарешті, порядок придбання даних зображення. У наступному прикладі, сіра шкала (8 біт) зображення 24 пікселів в ширину і 34 пікселів у висоту. Оскільки в постскриптумі зображення визначається з лівого нижнього кута, і зображення визначається з її лівому верхньому кутку, матриця перетворення використовується тут робить відповідну вертикальну переворот. Процедура, використовувана тут по суті нульовий порядок, це шістнадцяткова рядок, як зазначено в кутових дужках <>. Постскриптум робить зображення як одна точка квадратний отже масштабування по горизонталі і 24 по вертикалі 34. Є багато деталей, залишені з цього обговорення, читач повинен проконсультуватися з опорного приписка керівництво для отримання додаткової інформації.

100 200 translate
26 34 scale
26 34 8 [26 0 0 -34 0 34]
{<
ffffffffffffffffffffffffffffffffffffffffffffffffffff
ff000000000000000000000000000000000000ffffffffffffff
ff00efefefefefefefefefefefefefefefef0000ffffffffffff
ff00efefefefefefefefefefefefefefefef00ce00ffffffffff
ff00efefefefefefefefefefefefefefefef00cece00ffffffff
ff00efefefefefefefefefefefefefefefef00cecece00ffffff
ff00efefefefefefefefefefefefefefefef00cececece00ffff
ff00efefefefefefefefefefefefefefefef00000000000000ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efef000000ef000000ef000000ef0000ef0000efefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efef000000ef00000000ef00000000ef000000efefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efef0000ef00000000000000ef000000ef0000efefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff00efefefefefefefefefefefefefefefefefefefefefef00ff
ff000000000000000000000000000000000000000000000000ff
ffffffffffffffffffffffffffffffffffffffffffffffffffff
>}
image

24 Bit RGB Colour

Зображення RGB з 8 бітами на піксель може бути представлений у постскриптумі за допомогою командного colorimage, який дуже схожий на команду зображення. У наступному прикладі зображення 32 пікселів в ширину і 38 пікселів у висоту.

100 200 translate
32 38 scale
32 38 8 [32 0 0 -38 0 38]
{<
1dfb0023fb002afb0031fb0037fb003ffb00
66fb006cfb0073fb0079fb0081fb0086fb00
adfb00b5fb00bbfb00c3fb00c8fb00cffb00
23f5002af50031f50037f5003ff50044f500

           ...cut...

3807003f08004508004c0800520800590800
8108008608008d07009308009a0700a20800
c90800d00800d60800dd0800e40700ea0700
>}
false 3 colorimage

Що EPS?

EPS (Encapsulated PostScript) є нормальним приписка з деякими обмеженнями і кілька зауважень у заданому форматі, що забезпечує більше інформації про приписку, що слід. Це був проект, щоб зробити його простіше для програми, щоб включити приписку згенерований інших у своїх власних сторінок. Повна специфікація може бути отримана з Adobe, але для того, щоб зробити приписка файл DSC (Adobe’s Document Structuring Convention), дотримується наступне має бути істинним:

  • Там не повинно бути , так EPS призначений для включення в інші документи в showpage, очевидно, зіпсувати бажаний ефект. У реальності більшість програм, які імпортних EPS перевизначайте showpage, так що якщо він існує, то він не викликає проблем, загальне визначення є “/showpage { } def”
  • Файл повинен складатися тільки з одного сторінці.
  • У першому рядку файлу має бути “%!PS-Adobe EPSF-3.0”
  • Там повинні бути правильно сформовані BoundingBox коментар, це виглядає як %%BoundingBox: xmin ymin xmax ymax і каже, що застосування планує включити приписку, наскільки великий зображення є.
  • Файл не повинен використовувати будь оператори, які змінюють глобальний стан малювання. Зокрема, не може бути використана наступна команда:
banddevice      exitserver    initmatrix     setshared
   clear           framedevice   quit           startjob
   cleardictstack  grestoreall   renderbands    copypage
   initclip        setglobal     initgraphics   setpagedevice
   erasepage       nulldevice    sethalftone    setscreen 
   setgstate       setmatrix     settransfer    undefinefont
  • Стек повинен бути залишений саме в тому ж стані, в кінці файлу EPS, як це було на початку файлу EPS.
  • Лінії в EPS файлів не може перевищувати 255 символів.

Можливо, найголовніше, так як, як правило, додаток, що підтримує вставку приписка файл не повний інтерпретатор постскриптум, EPS-файл зазвичай має попередній перегляд зображення, пов’язаного з ним. Додаток справу з файлом EPS може відображати попередній перегляд в інтерфейсі дає краще уявлення, що буде друкувати. Слід зазначити, що EPS превью є одним з найбільш машини/OS залежних аспектів EPS.

Часто використовувані коментарі

Коментарі можуть бути, звичайно, бути додані в будь-якому місці, і вони будуть ігноруватися інтерпретатором. Є деякі стандартні коментарі найбільш поширеним з яких буде, перераховані нижче. Текст у квадратних дужках слід замінити відповідним текстом для файлу, в якому вони з’являються (без []).

%!PS-Adobe-3.0 EPSF-3.0
   %%Creator: [generally the program that generated the postscript]
   %%Title: [descriptive name or just the file name]
   %%CreationDate: [date the file was created]
   %%DocumentData: Clean7Bit
   %%Origin: [eg: 0 0]
   %%BoundingBox: xmin ymin xmax ymax
   %%LanguageLevel: 2 [could be 1 2 or 3]
   %%Pages: 1
   %%Page: 1 1
   %%EOF

Малюнок “великі” зображення

Завдяки довжині рядка та інших обмежень, перетворюючи “великі” растрових зображень у постскриптумі вимагає модифікації методів описаних раніше. Далі будуть описані найбільш загальний випадок, що представляє 24 бітний RGB кольорове зображення у вигляді файлу EPS. У той час як неефективна це може також бути використані для відтінках сірого і навіть чорно-білих зображень. У наступному коді “ширина” і “висота” слід замінити з номерами, відповідними образу.

%!PS-Adobe-3.0 EPSF-3.0
%%Creator: someone or something
%%BoundingBox: 0 0 width height
%%LanguageLevel: 2
%%Pages: 1
%%DocumentData: Clean7Bit
width height scale
width height 8 [width 0 0 -height 0 height
{currentfile 3 width mul string readhexstring pop} bind
false 3 colorimage

...hexadecimal information cut...

%%EOF

Модифікації для зображень у градаціях сірого досить просто, змініть рядок

{currentfile 3 width mul string readhexstring pop} bind

до

{currentfile width string readhexstring pop} bind

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

Розміри паперу

 Paper Size                      Dimension (in points)
   ------------------              ---------------------
   Comm #10 Envelope               297 x 684
   C5 Envelope                     461 x 648
   DL Envelope                     312 x 624
   Folio                           595 x 935
   Executive                       522 x 756
   Letter                          612 x 792
   Legal                           612 x 1008
   Ledger                          1224 x 792
   Tabloid                         792 x 1224
   A0                              2384 x 3370
   A1                              1684 x 2384
   A2                              1191 x 1684
   A3                              842 x 1191
   A4                              595 x 842
   A5                              420 x 595
   A6                              297 x 420
   A7                              210 x 297
   A8                              148 x 210
   A9                              105 x 148
   B0                              2920 x 4127
   B1                              2064 x 2920
   B2                              1460 x 2064
   B3                              1032 x 1460
   B4                              729 x 1032
   B5                              516 x 729
   B6                              363 x 516
   B7                              258 x 363
   B8                              181 x 258
   B9                              127 x 181
   B10                             91 x 127