PostScript 是一種編程語言,最適用於列印圖像和文字(不管是在紙、膠片或非物質的 CRT
均可)。用現今的行話講,它是頁面描述語言。它既能夠像程序代碼同樣具備可讀性,又能表示出可任意放大和縮小的矢量圖。git
Postscript 語言以空格,換行符或水平製表符做爲基本分割符,以百分號("%")爲註釋開始的標誌,每行註釋在遇到換行符結束,全部的字符都用 ansi
編碼。github
Encapsulated PostScript 是一種被封裝的 PostScript 格式,簡稱 EPS。它主要包含如下幾個特徵:編程
(1)EPS 文件格式又被稱爲帶有預視圖象的 PS 格式,它是由一個 PostScript 語言的文本文件和一個(可選)低分辨率的由 PICT
或TIFF
格式描述的表明像組成。編程語言
(2)EPS 文件格式的「封裝」單位是一個頁面,也就是一個。EPS 文件只包含一個頁面的描述。這樣,若是有50個頁面的出版物就會產生50個 EPS 文件。另外要注意:頁面大小能夠隨着所保存的頁面上的物體的總體長方形邊界來決定,因此它既可用來保存組版軟件中一個標準的頁面大小,也可用來保存一個獨立大小的對象的矩形區域。編輯器
(3)其文本部分一樣既可由 ASCII
字符寫出(這樣生成的文件較大,但可直接在普通編輯器中修改和檢查),也能夠由二進制數字寫出(生成的文件小,處理快,但不便修改和檢查)。svg
(4)EPS 文件雖然採用矢量描述的方法,但亦可容納點陣圖像,只是它並不是將點陣圖像轉換爲矢量描述,而是將全部像素數據總體以象素文件的描述方式保存。而對於針對象素圖像的組版剪裁和輸出控制參數,如輪廓曲線的參數,加網參數和網點形狀,圖象和色塊的顏色設備特徵文件(Profile)等,都用 PostScript 語言方式另行保存。工具
PostScript 語言可以用來描述圖形和文本。它既可在傳統的 PostScript(PS) 文件中來描述多頁的文檔,也用於 Encapsulated PostScript(EPS) 文件中來描述插入文檔的圖形。 PS 和 EPS 主要的區別在於:學習
BoundingBox
行來肯定 EPS 圖形的大小。因爲 EPS 圖形須要和其它對象一塊兒共享頁面,因此 EPS 文件中不能使用像 選擇頁面大小 (a4
或 letter
) 和清除整個頁 面 (erasepage
) 等命令。下面是一些不能在 EPS 文件中使用的 PostScript 操做符:ui
a3 | a4 | a5 | banddevice |
---|---|---|---|
clear | cleardictstack | copypage | erasepage |
exitserver | framedevice | grestoreall | initclip |
initgraphics | initmatrix | letter | legal |
note | prenderbands | quit | renderbands |
setdevice | setglobal | setpagedevice | setpageparams |
setsccbatch | setshared | startjob | stop |
儘管下列 PostScript 操做符能夠在 EPS 文件中使用,可是不適當的使用它們極易致使錯誤:編碼
nulldevice | setcolortransfer | setgstate | sethalftone |
---|---|---|---|
setmatrix | setscreen | settransfer | undefinedfont |
上面的一些操做符可能會使 PS 到 EPS 的轉換失敗,另外一些則可能致使像 圖形位置錯誤或圖形消失等奇怪的問題。由於這些操做符絕大部分不會影響 到 PostScript 的堆棧,因此,在大多數狀況下,簡單的將這些招致問題的操做符 刪除就可解決問題。其它的情形則須要更爲複雜的 PostScript 的知識。
習慣上,PostScript 文件的第一行是標明該文件的類型,接下來的幾行是 被稱爲 header 或 preamble 的註釋行 ( PostScript 的註釋符也是 %)。 這些註釋中的一行就定義了 BoundingBox 。BoundingBox 這行有四個整數值, 分別表明:
%!PS-Adobe-2.0 EPSF-2.0
%%Creator: gnuplot
%%DocumentFonts: Times-Roman
%%BoundingBox: 50 50 410 302
%%EndComments
複製代碼
上面的例子是一個EPS 文件的前五行, 這個 EPS 圖形的左下角的座標是 (50,50), 右上角的座標是 (410,302)。這裏座標的單位是 PostScript point, 等於 1/72 英寸。這樣上面的這幅圖的天然寬度爲 5 英寸, 相應的天然高度爲 3.5 英寸。須要注意的是 PostScript point 要比 TEX point (等於 1/72.27 英寸)稍大, 在 TEX 和 LATEX 中,PostScript points 被稱爲 big points'' 或簡稱 `bp`, TEX point 被稱爲
points'' 或簡稱 pt
。
單頁的 PostScript 文件,若是沒有包含不適當的命令的話,可用下述方法轉爲 EPS 文件並加上 BoundingBox。 因爲這些方法 都不檢查非法的 PostScript 操做符,因此只有在被轉換的 PostScript 文件自己 不含有那些被禁制使用的操做符的狀況下,才能獲得正確的 EPS 文件。
ps2epsi
。它能夠讀入 PostScript 文件並計算 BoundingBox 的參數,而後生成一個含有 PostScript 圖形 的 EPS 文件。 最終獲得的 EPS 文件是 EPSI 格式,即它在文件的開始部分帶有一個底分辨率的預覽位圖。由於這個預覽位圖是 ASCII編碼 的,使得文件變大。\includegraphics
的 bb
方式)。計算 BoundingBox 的方法有如下幾種:用 Ghostview 或 GSview 將 PostScript 圖形打開,當鼠標在圖形上移動時就會顯示相應的座標(以頁面的左下角爲參照點)。 記下圖形的左下角和右上角的座標就可肯定它的 BoundingBox。
將 PostScript 圖形打印一份,測量它的左下角和右上角到頁面的左下角 的水平和垂直距離(以英寸爲單位),而後乘以
使用 bbfig
。bbfig
是一個腳本文件, 它在 PostScript 圖形文件前面加入一些 PostScript 命令並送往 PostScript 打印機。這時加入的命令會計算 BoundingBox, 而後將結果打印在 PostScript 圖形上面。
Post Script 很是適合製做學術論文插圖,由於在不少頂尖學術期刊要求示意圖必須爲矢量圖,而 Latex 支持的矢量圖通常都是 eps 格式的矢量圖。Adobe公司的illustrator和免費軟件Inkscape都支持eps格式矢量圖的編輯。公式編輯器MathType,幾何做圖軟件Geogebra,還有強大的科學計算軟件Matlab都支持保存爲eps格式矢量圖。所以,若是學會了Post Script語言,能夠在它們輸出的矢量圖的基礎上加以修改,從而獲得更適應論文的插圖,對於寫出高質量的學術論文有重要意義。
學習PostScript語言推薦的書爲Adobe公司發佈的Post Script Language Reference Third Edition,這本書能夠在公司官網免費下載電子版 。
svg-cairo-ps 基於 Cairo 二維矢量圖形庫轉換
svg-path-parse An SVG path parser
參考資料: