PostScript——PostScript語言教程


本文轉載自:https://www.cnblogs.com/Ansing/tag/PostScript%E8%AF%AD%E8%A8%80%E6%95%99%E7%A8%8B/

 


一、介紹

 

POSTSCRIPT語言是打印機頁面魔術的一種程序設計語言。他擁有着廣泛的圖形操作,並且可以以任意方式,包含變量,函數,以及過程的任意組合。

POSTSCRIPT頁面描述是由解析器運行的程序(gs),postscript程序通常是由其他應用程序生成的。

1.1、POSTSCRIPT作為頁面語言

POSTSCRIPT具有大量的圖形運算符,通過他可以更加詳細的描述你的頁面。

文本的字體,位置,方向,尺寸。
幾何圖形的大小,方向,寬度,直線和曲線的位置,任何大小形狀顏色的空間填充。

1.2、POSTSCRIPT作為編程語言

 


二、堆棧和運算

POSTSCRIPT 編程語言和其他編程語言一樣,適用於各種各樣的數據,例如數字,數組,字符串,以及字符。這種處理數據的方法被稱為POSTSCRIPT對象。
操作數據的方法有多種多樣,例如:將數據放入變量名,通過變量名稱進行處理。POSTSCRRIPT語言擁有變量,但也可以通過堆棧直接操作數據。

2.1、POSTSCRIPT堆棧

堆棧是一段用於處理數據的內存,是一種先入后出的存儲原理。

將數字入棧: 12 6.3 -99 
說明:

1.將12入棧
2.將6.3,入棧,12壓棧
3.將-99 入棧,前兩個一次類推

 

2.2、運算

運算 代碼示例 結果
 5 27 add  32
 8.3 6.6 sub  1.7
 13 8 div  1.625
除返回整數  25 3 idiv  8
除返回余數  12 10 mod  2
 6 8 mul  48
取反  -27 neg  27

 

組合運算:

6 + (3 ÷ 8)
1. 3 8 div 6 add
將3,8入棧,除運算,0.375,再講6 入棧,加運算,得6.375
2. 6 3 8 div add
將6,3,8,入棧,8為棧頂,取3,8,進行除運算,結果再與6 進行加運算


8 - (7 × 3)
1. 7 3 mul 8 exch sub
2. 8 7 3 mul sub

exch:交換棧的前兩項空間數據

清除所有棧數據: 6 8 12 32 clear => 空
復制堆棧頂部的數據: 6 dup => 6 6
刪除堆棧頂部數據: 17 8 pop => 17
旋轉數據: 7 8 9 3 1 roll => 9 7 8 : 789依次入棧,1代表從頂到底,798,978
7 8 9 3 -1 roll => 897 : -1代表從低端到頂端,879, 897

2.3、交互運算符
== 將堆棧頂端的數據打印出來,並且刪除。
pstack 將整個棧中的數據打印數來,保留數據。

 


三、繪圖

3.1、畫線

線:

newpath
144 72 moveto
144 432 lineto
stroke
showpage

說明:

我們首先調用newpath,初始化當畫筆狀態。

x y moveto,將畫筆的移動到x,y的位置
x y lineto,以x,y為終點進行畫線
stroke將構建的路徑繪制到當前頁面
showpage打印當前頁

交叉線:

newpath
72 360 moveto
144 72 rlineto
144 432 moveto
0 -246 rlineto
storke
showpage

說明:

x y rlineto:將畫筆位以x,y進行位移

 

正方形:

newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
4 setlinewidth
stroke showpage

說明:

setlinewidth:設置線的寬度

newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
closepath
4 setlinewidth
stroke showpage

closepath:使圖形閉合(不使用的時候在拐角的地方會出現一個小缺口)


3.2、填充圖形

newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
closepath
fill showpage  

fill:填充圖形

newpath
270 360 moveto
0 72 rlineto
72 0 rlineto
0 -72 rlineto
-72 0 rlineto
closepath
.5 setgray
fill showpage
 

gray:設置透明度

多圖的疊層:

newpath
    252 324 moveto
    0 72 rlineto
    72 0 rlineto
    0 -72 rlineto
    -72 0 rlineto
closepath
.5 setgray
fill showpage
 
newpath
    270 360 moveto
    0 72 rlineto
    72 0 rlineto
    0 -72 rlineto
    -72 0 rlineto
closepath
.5 setgray
fill showpage
 
newpath
    288 396 moveto
    0 72 rlineto
    72 0 rlineto
    0 -72 rlineto
    -72 0 rlineto
closepath
.5 setgray
fill showpage

  

3.3、總結

closepath 閉合圖形
lineto 繪制直線
moveto 設置繪制的起始點
newpath 初始化繪制方式
rlineto 移動
fill 繪制填充圖形
setgray 設置透明度
setlinewidth 設置線的寬度
stoke 繪制路徑
showpage 打印當前頁

 


四、程序變量使用

4.1、變量定義
POSTSCRIPT 變量
變量的定義是將變量名和值用def進行關聯類似:

/ppi 75 def   %將ppi定義為75
/ppi ppi 1 add def  %將ppi + 1的值定義為ppi ppi = 75 + 1 = 86

POSTSCRIPT 程序塊:

/inch {72 mul} def

 

4.2、使用程序和變量


方塊:

/box
{
72 0 rlineto
0 72 rlineto
-72 0 rlineto
closepath
}def
 
newpath
252 324 moveto box
.4 setgray fill

 

/inch {72 mul}def
 
/box
{
newpath moveto
1 inch 0 rlineto
0 1 inch rlineto
-1 inch 0 rlineto
closepath
}def
 
/fillbox
{
setgray fill
}def
 
3.5 inch 4.5 inch box
0 fillbox
2.75 inch 5 inch box
.4 fillbox

 


五、文本打印

5.1、POSTSCRIPT字體

字體是具有統一規格的字符集。其中包含數百個字符集,包含熟悉的TIMES和HELVETICA

使用POSTSCRIPT字體
在你打印文本之前,你需要指定所需的字體,這個過程需要三個步驟:

  1. 查找字體的信息。保存在當前環境中,他用來提供特定字體的形狀,信息。
  2. 將字體縮放。
  3. 將縮放的額字體設置為當前字體,然后打印出來
%!PS-Adobe-3.0
 
/Times-Roman findfont 15 scalefont setfont
 
72 200 moveto (typography) show
 
showpage

 

/Times-Roman findfont

查找名稱為Times-Roman的字體,並把它保存到當前程序中

15 scalefont
設置字體大小為15號的Times-Roman字體

setfont
根據已經保存好的規格,對字體進行設置

 

5.2、動態設置字體大小

%!PS-Adobe-3.0
 
/scaleTimes % stack:scale
{
/Times-Roman findfont
each scalefont setfont
}def
 
6 scaleTimes
72 200 moveto (typography) show
showpage

 

/Times-Roman findfont 入棧

each scalefont setfont 入棧

6 scaleTimes意義為
6 /Times-Roman findfont each scalefont setfont
each 將 6 和 /Times-Roman 交換位置得
/Times-Roman findfont 6 scalefont setfont

默認支持的字體字體:
Times-Roman
Times-Bold
Times-Italic
Times-Boldltalic
Helvetica
Helvetica-Bold
Helvetica-Oblique
Helvetica-Boldltalic
Courier
Courier-Bold
Courier-Oblique
Courier-BoldOblique

%!PS-Adobe-3.0
 
/MainFont
    /STSong-Light--GB-EUC-H findfont 15 scalefont def
/SloganFont
    /Helvetica-Oblique findfont 7 scalefont def
/OwnerFont
    /Helvetica  findfont 10 scalefont def
 
/rightshow
{
    dup stringwidth pop
    150 exch sub
    0 rmoveto
    show
}def
 
/CardOutline
{
    newpath
    90 90 moveto
    0 144 rlineto
    252 0 rlineto
    0 -144 rlineto
    closepath
    .5 setlinewidth
    stroke
}def
 
/doBorder
{
    99 99 moveto
    0 126 rlineto
    234 0 rlineto
    0 -126 rlineto
    closepath
    2 setlinewidth
    stroke
}def
 
/Diamond
{
    newpath
    207 216 moveto
    36 -54 rlineto
    -36 -54 rlineto
    -36 54 rlineto
    closepath
    .8 setgray
    fill
}def
 
/doText
{
    0 setgray
    90 180 moveto
    MainFont setfont
    (AAA丶死劉) rightshow
 
    90 168 moveto
    SloganFont setfont
    ("The Club of Lonely Hearts") rightshow
 
 
    216 126 moveto
    OwnerFont setfont
    (Sam Spade) show
 
    216 111 moveto
    (Owner) show
}def
 
 
CardOutline
doBorder
Diamond
doText
 
showpage

 

/STSong-Light--GB-EUC-H 為中文打印(注:中文打印時候要求文件格式為gb2312,否則字庫不識別,打印出來是亂碼)

stringwidth 獲取當前字符串的寬度,寄存起為字符串寬度 ,字符串內容,寬度在頂端

dup stringwidth pop 
150 exch sub 
0 rmoveto
show


意義為:
  獲取字符串寬度,並將(150 - 字符串寬度的值,0)進行偏移,即:打印字符串在150處右端對齊。

 



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM