PostScript инстркцията

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

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


Въвеждане

Postscript е програмен език, който е проектиран да се определи разположението на отпечатаната страница. Postscript принтери и софтуер послепис дисплей използва преводач, за да конвертирате описание на страница в показаните графики.

Следната информация е предназначена както за първи урок на PostScript език. Той ще се съсредоточи върху това как да използвате послепис за генериране на графика, а не да я проучи като програмен език. До края трябва да се чувстват уверени за писането на прости програми послепис за изготвяне на графика и текст. Допълнителна информация и пълна спецификация на езика може да бъде получена от Справочник на езика Postscript Наръчник от Adobe Systems Inc, публикуван от Addison-Wesley, Четене, Massachuchusetts, 1985.

Защо да се научат послепис, в края на краищата, много програми могат да генерират за вас и послепис печатни драйвери може да печата във файл? Някои от причините може да бъде:

  • Като директен послепис изход често може да доведе в много по-ефективно послепис, postscipt, която отпечатва по-бързо, отколкото по-общо изход от драйвери за принтери.
  • Има много случаи, когато генериране на PostScript директно може да доведе до много добро качество. Например при изготвянето на много видове фрактали, където висока резолюция е необходимо, могат да се направят в родния висока резолюция на PostScript принтер е желателно.
  • Това не е необичайно за комерсиални пакети, за да правят грешки с техните послепис и мощност. Да бъдеш в състояние да се гледам в послепис и да направи някакъв смисъл от това, което се случва понякога може да даде прозрение за това как да се реши проблема.

Основите

Postscript файлове (по принцип) обикновени текстови файлове, и като такива те могат лесно да бъдат генерирани от ръка или като на изхода на потребителя писмените програми. Както при повечето езици за програмиране, PostScript файлове (програми) са предназначени да бъдат, поне частично, четима за човека. Като такива, те обикновено са свободен формат, това е текст може да бъде разделен във всички линии и отстъп, за да hilight логическа структура.
Коментари могат да бъдат вмъкнати навсякъде в рамките на PostScript файл с процент (%) символ на коментар се прилага от% до края на линията.
Макар и да не е част от послепис спецификация на първа линия на PostScript файл често започва като%!. Това е, така че spoolers и други печат софтуер открие, че файлът е да се тълкува като послепис вместо обикновен текстов файл. Инлайн примера по-долу не ще включват това, но PostScript файлове, сочени от тази страница ще го включа, тъй като те са проектиране за директен печат.
Първата команда послепис да научите е showpage, то силите на принтер за отпечатване на страница с каквото е в момента върху него. Примерите, дадени по-долу печат на единични страници и следователно има showpage в края на файла във всяка пример, вижте коментарите по-късно по отношение на EPS.

Път

Път е събирането на, вероятно, линии и области, които описва изображението. А пътят е само по себе си не съставен, след като е определено може да се галят (линии) или пълнеж (области), като съответните марки на страницата. Налице е специален вид на пътя нарича клипинг пътека, това е път, в рамките на които е ограничено бъдеще чертеж. По подразбиране клипинг път е правоъгълник, който съвпада с границата на хартия, няма да бъдат променяни по време на този урок.

Стека

Postscript използва стека, иначе известни като LIFO (Last In First Out) стека за съхранение на програми и данни. Послепис преводач места послепис програма в стека и изпълнява инструкциите, които се нуждаят от данни, ще прочетете, че данните от стека. Например, там е оператор в послепис за умножаване на две числа, MUL. тя изисква два аргумента, а именно две числа, които трябва да бъдат умножени заедно. В послепис, това може да бъде определен като

   10 20 mul

Преводачът би поставило 10 и 20 върху стека. MUL оператор ще премахне 20 и 10 от стека, като им се размножават заедно и да напусне резултат, 200, в стека.

Координатна система

Postscript използва координатна система, която е независим устройство, това означава, че не разчита на резолюция, размера на хартията, и т.н. на крайното изходно устройство. Първоначалната координатна система х ос на правото и Y ос нагоре, произход се намира в долния ляв ъгъл на страницата. Единиците са на “точки”, които са 1 / 72 от инча дълго. С други думи, ако ние нарисувайте линия от послепис координати (72,72) (144,72) ще имаме линия, започва един инч от ляво и дясно на страницата, линията ще бъде хоризонтална и да бъде един инч дълго.

Координатна система може да бъде променена, това е мащабирани, завъртян, и преведени. Това често се прави, за да формират по-удобна система за-специално на тираж, се създават.

Основни команди на тираж

Време е да изготвят нещо. По-долу се състои на броя на операторите и данни, някои оператори като newpath не се нуждаят от аргументи, други като lineto вземат два аргумента от стека. Всички примери в този текст са показани като послепис на ляво с полученото изображение в дясно. Текстът на ляво, също действа като връзка към вид удобен за печат на PostScript файл.

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

Има също са относително moveto и lineto команди, а именно, rmoveto и rlineto.

В този следващия пример попълнена обект ще бъде изтеглен в сянка, както за контур и интериора. Shades варират от 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 инча). Скоби около думите “Пример 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

Трябва да се уверете, че сте разбрали реда на операторите по-горе, и в резултат на ориентацията и мащаба на текста, процедурно привлича текст, мащаба на оста Y с коефициент от 2, се върти обратно на часовниковата стрелка за произход, най -накрая преведат координатна система (100200).

Цвят

За тези с цвят LaserWriters основните инструкции на интерес, който замества setgray предишните примери setrgbcolor. Тя изисква три аргумента, червено-зелено-сини компоненти на цвят, всяка от 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

Програмиране

Както бе споменато във въведението послепис е език за програмиране. Степента на този език, няма да бъдат обхванати тук, освен да покаже някои примери за процедури, които могат да бъдат полезни за да се опрости поколение PostScript и PostScript файлове по-малки.
Нека приемем, е необходимо да се правят много от квадратчета с отпадането на граничните, но изпълнен с особен цвят. Човек може да създаде път многократно за всеки един, алтернативно може да се определи нещо като следното.

/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

Някои други полезни команди

По-долу са някои други често използвани команди, заедно с кратко описание, отново трябва да се консултирате с препратка за употреба за целия набор от команди.

дъга

Обръща дъга (включително кръг). Аргументите са xcenter, ycenter, радиус, започнете ъгъл, да спре ъгъл. Дъга е съставен обратно на часовниковата стрелка, ъглите са в единици на степени.

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

Това прави Безие крива чрез трите точки, дадени като аргументи. Кривата започва от първата точка, приключва в последната точка, и тангенти са дадени от линията между първия и втория и втора-трета двойка.

Запазване и възстановяване

Вместо да се налага да “връщане” на промените състоянието на графични, че е възможно да се използват, освен да натиснете цялата държава графики върху стека, и след това да го възстанови по-късно с една възстановяване.

Рисуване “малки” Образи

Отпечатване на изображения използва послепис е малко по-ангажирани от графиката обсъдиха досега. Примери за две типове изображения ще бъдат представени, сивата скала изображения (което би могло да се използва и за черно-бели изображения) и 24-битови RGB изображения.

8 Bit Grey Scale

Най-простият метод, който се прилага към малки изображения, е имиджа PostScript команди. Това отнеме от 5 аргументи: ширината и височината на изображението, бита за пиксел, трансформация матрица (6 числа) и накрая на процедура за придобиване на данните на изображението. В следващия пример, мащабът на сиво (8 бита) изображението е 24 пиксела широчина от 34 пиксела висок. Тъй като в послепис изображение се определя от по-долния ляв ъгъл, и изображението се определя от горния си ляв ъгъл, трансформация матрица, използван тук се Съответното вертикално обръщане. Процедура, използвана тук, е esentially нулева процедура, тя е шестнадесетичен низ, както е посочено от ъглови скоби <>. Postscript прави изображения като квадрат със страна една точка оттук мащабиране от 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) е нормално послепис с няколко ограничения и няколко коментара в определен формат, който осигурява повече информация за PostScript, че следва. Това е дизайн, за да се направи по-лесно за подаване на заявления за включване на PostScript, някъде другаде в рамките на техните собствени страници. Пълната спецификация може да бъде получена от Adobe но с цел да направи послепис файла DSC (Конвенцията на Adobe документ Структуриране) съответства, трябва да е вярно:

  • Не трябва да се showpage, тъй като EPS е проектиран да бъде включен вътре в други документи, очевидно showpage ще съсипе очаквания ефект. В действителност повечето програми, че вносните EPS предефинират showpage, така че ако тя не съществува, тя не създава проблеми, обща дефиниция е “/ Def showpage {} ”
  • Файлът трябва да се състои от само една страница.
  • Първият ред на файла трябва да бъде “%! PS Adobe EPSF-3.0″
  • Трябва да има правилно формира коментар BoundingBox, това изглежда като
    % BoundingBox: xmin ymin ход на мембраната 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 знака дължина.

Може би най-важното, тъй като обикновено приложение, което поддържа вмъкване на PostScript файла не е пълен преводач послепис 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