跳至內容

PostScript

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

PostScriptPS)是主要用佇電子產業佮桌面出版領域的一種頁面描寫語言佮程式語言。

歷史

PostScript 語言的思想起源於 John Warnock 一九七六年咧出名的電腦圖形公司 Evans and Sutherland 時的想法。彼當陣 John Gaffney 當咧開發一个解說紐約港大型三維圖形資料庫的直譯器。Gaffney 設計了足類似的 Forth 程式語言的Design System語言來處理圖形。

一九七八年 Evans and Sutherland 要求 Warnock 離開舊金山灣佮猶閣伊州總部去,但是伊並無想欲搬厝到伊遐去。所以伊尾仔有加入 Xerox PARC 佮 Martin Newell 做伙做工課。𪜶重寫矣 Design System 開發出來用 VLSI 設計佮字型佮圖形列印研究的JaM(John and Martin)系統。這項工課尾仔發展做一个成做 InterPress 的擴充系統。

佇咧一九八二年十二月 Warnock 和 Chuck Geschke 做伙離開建立矣 Adobe Systems 公司。𪜶開發一種類似 InterPress 號做 PostScript 的閣較簡單的語言,這種物件佇一九八四年捒向市場。大概佇這个時陣,Steve Jobs 參觀了𪜶的工課,伊敦促𪜶改進 PostScript 成做趕動雷射印表機的語言,伊添加到 Canon 印表彼个機誕生矣 LaserWriter。

一九八五年三月,Apple LaserWriter 是頭一款帶有 PostScript 的印表機,這嘛紮來一九八空年代中期的桌面印刷革命。伊的技術優點佮廣泛應用用 PostScript 成做列印應用領域影像輸出的一个選擇。一直到一九九空年代,PostScript 語言直譯器,有時叫做 Raster image processor,捌一度成做雷射印表機的一个普通組成部份。

隨著使用電子方式發布文件最後版本成做事實上的標準,PostScript 就佇咧這个領域不斷的予伊的後續版本 Portable Document Format 也就是講 PDF 所超越,到甲二空空一年閣較少有印表機支援 PostScript,這主要是因為來自非 PostScript 的俗價噴墨印表機的不斷加劇的競爭(PostScript 直譯器共大幅度的增加印表機成本), 猶閣有佇電腦使用軟體彩 PostScript 圖像的新方法會當用佇任何的印表機,PDF 就是這種方法之一。毋過使用 PostScript 的雷射印表機猶原會當大幅度地減少電腦佇列印、對電腦到印表機傳輸彩現出的 PostScript 圖像方面的工作量。

PostScript 經歷兩擺主要的換新。頭一版叫做 PostScript Level 一佇一九八四年發佈。PostScript Level 二在一九九一年發佈,伊有幾若項增強的特性:提升速度佮可靠性;支援 RIP 內底的分割;支援解壓縮,這意味就是講 JPEG 按呢的圖像會當直接佇 PostScript 程式當中進行處理;支援複合字型以及緊取重用內容的 Form 機制。PostScript Level 三在一九九七年年尾出現,真濟舊版運算子變做是字典的新版本,伊提供了閣較好的色水處理佮新的允准佇咧程式內底進行壓縮佮解壓的過濾器、程式 chunking 以及先進的錯誤處理。

佇咧列印中的應用

PostScript 進前

佇咧 PostScript 出現進前,印表機設計做將字元—— 通常是 ASCII 字元—— 列印出來。有真濟技術用佇這項工課,但是大多數攏有一个共性也就是字元佇咧物理上真歹去共改,就親像咧拍字機鍵上的金屬抑是光學平板彼款的條帶。

隨著點陣印表機的流行發生的一寡變化,佇咧遮的系統上字元是用一系列的點「畫」出來的,遮的點佇印表機中定義做字型表。這馬𪜶愈來愈複雜,點陣印表機開始包括有幾種內建的字型,使用者會當選擇所用字型,有一寡型號甚至允准使用者下載家己的字元圖形到印表機中。

點陣印表機嘛帶有列印光柵圖形的能力,圖形佇咧電腦進行解說並且使用一系列的跳脫序列將𪜶按照一系列的點傳送到印表機。這種印表機控制語言隨著印表機的無仝而無仝,這就要求程式設計師建立真濟的驅動程式。

真正的圖形列印是名做繪圖儀的特殊的裝置所完成的,繪圖儀的確實是共享一款捷見的語言—— HPGL,但是除了列印圖以外並無偌大的用途。另外咧,嘛是𪜶通常價數貴參參,速度較慢,所以使用足少的。

PostScript 列印

PostScript 共印表機佮繪圖儀的優點組合做伙對而且拍破傳統。同繪圖儀仝款,PostScript 有高品質的曲線處理能力並且控制語言簡單會當用無仝品牌的印表機;仝款陣印表機仝款,PostScript 提供一个生成文字佮光柵圖形的簡單方法。佮𪜶兩个無仝的是,PostScript 會當共所有遮的無仝的內容囥佇仝一頁頂懸,按呢就比較早的印表機抑是繪圖儀提供了閣較靈活性。

PostScript 已經超出了普通的印表機控制語言,並成做一个完善的程式語言。真濟應用程式會當共文件傳送到一个 PostScript 程式當中,伊的輸出來就按呢原始的文件。這个程式會當傳送到印表機中的直譯器頂懸得著列印文件,或者是傳送到另外一个應用程式佇螢幕頂懸顯示文件。因為文件程式佮目的地無關係,所以就予人號做「閣裝置無關係」。

PostScrip 嘛非常真𠢕佇咧實現柵格化;所有的物件,甚至文字攏會當用直線佮三階貝窒爾曲線表示,貝塞爾曲線較早干焦佇咧 CAD 應用中才會當看著,伊允准任意的縮放、轉踅抑是其他變換。當解說 PostScript 程式的時陣,直譯器共遮的指令轉換做所需要的點做輸出內容。

字型處理

仝 PostScript 原仔複雜的是伊的字型處理。豐富的字型系統使用 PS 基本圖形共字元畫做藝術線條,藝術線條會當佇任意的解析度生成。就算講這聽起來就是足直觀的概念,毋過需要考慮真濟的拓圖形問題。

其中一个問題是字型佇咧小學 sài-sù 的時陣實際上並毋是進行線性縮放,若彼款的話字型的某一寡部份就會無成比例地過大抑是過細字型看起來無啥正確。PostScript 使用佮字形曲線儉做伙的 _ 隱含資訊 _(Hints)避免這个問題的發生,𪜶基本上是水平抑是直接的方向條帶頂懸一寡附加資訊,用標識光柵圖像生成器需要維護的字型中的重要特徵。甚至佇足低的解析度的時陣字型嘛是非常好看;通稱做 Adobe 的Type 一 Font。Type 一是一个高效干焦用來儉字型資訊的簡化 PS 系統,毋是一个完善的語言,PDF 嘛是一種類似的狀況。Adobe 共遐的拍算佇家己的字型中添加隱含資訊的廠商徵收高額的 Type 一技術授權使用費用。遐的毋願意使用隱含資訊抑是毋願支付費用的使用者干焦會當使用Type 三 Font。Type 三字型允准使用除了標準的隱含資訊以外的 PostScript 語言的所有複雜特性,尾仔閣加添一寡其他的無仝款特點。

濟濟人認為授權的費用傷過歡喜,並且 Adobe 嘛無願意採用閣較有吸引力的費率,按呢就致使矣 Apple 佇一九九一年左右開發矣𪜶家己的系統 TrueType。隨著 TrueType 的發布,Adobe 就公開矣 Type 一字型的規範。如 Altsys Fontographer(一九九五年一月予人 Macromedia 收購,自從二空空五年五月歸 FontLab 所有)這款的零售系統加入了建立 Type 一字型的能力。彼陣開始,就出現矣真濟免費 Type 一字型,比如講 TeX 排版系統中所用字型就是這種格式。

佇咧一九九空年代早期閣有其他幾種字型的字型系統,如 Bitstream 和 METAFONT 開發的系統,但是𪜶攏無包括通用的列印解決方案,所以並無得著講廣泛應用。

佇一九九空年代,Adobe 微軟公司做伙來開發 OpenType,伊基本上是 Type 一和 TrueType 格式功能的超集。當列印到 PostScript 輸出裝置的時,OpenType 字型中無需要的部分就會予人挕捒,驅動程式送到裝置的內容佮傳送 TrueType 抑是講 Type 一字型完全仝款,根據 OpenType 字型中的外形無仝款而有所不同。

其他的實現

佇一九八O年代,Adobe 利純的絕大部份攏來自用佇印表機的 PostScript 實現(號做光柵圖像處理器抑是 _ RIP _)的高昂授權費用。RIP 不止仔貴,而且通常只有佇少數一寡特定的硬體頂懸執行。一九八空年代中期隨著真濟基於 RISC 的新平台出現,Adobe 不時是支援新機器方面落後一步。

所以第三方的彼 PostScript 實現變甲真普遍,尤其是佇咧授權費用是關鍵癥結的低階印表機抑是新硬體激發閣較緊速度要求的高端排版裝置領域閣較捷用。一方面,微軟公司佮蘋果公司聯合起來努力將 Adobe 對獨霸印表機的位搝落來,微軟公司來共伊買的 TrueImage PostScript 直譯器授權予蘋果公司,蘋果公司將伊的新字型格式 TrueType 授權予微軟公司。(蘋果公司終止矣佮 Adobe 保持一致佮伊的印表機使用 Adobe 公司真正的 PostScript 的策略,猶毋過 TrueType 佇微軟視窗佮 Macintosh 上攏成做是標準的 outline font。)一寡第三方的 PostScript 的克隆產品猶原佇廣泛使用,尤其是咧做惠普烏白雷射印表機標準 Phoenix Page 的中猶原廣泛使用。

真濟基本的俗價雷射印表機無支援 PostScript,𪜶的驅動程式曷無咧使用矣 PostScript。當需要佇咧按呢的印表機頂頭使用 PostScript 的時陣會當使用名做講 Ghostscript 的 PostScript 直譯器,這是一个自由軟體。Ghostscript 使用主電腦的 CPU 進行光柵化處理、共結果做一个大幅的點陣圖傳送到電腦按呢一種方式佇咧非 PostScript 印表機頂懸列印 PostScript 文件。Ghostscript 嘛會當佇電腦顯示器上預覽 PostScript 文件佮將 PostScript 轉做如講 TIFF 和 PNG 這款的光柵圖形抑是 PDF 按呢的向量式。

解析度真懸的裝置,如 imagesetter 抑是講 CTP platesetter 超過兩千五百 dpi 的解析度嘛誠捷看著,猶原需要帶有大量記憶體佮吸碟空間的外部光柵圖像處理器。真濟講是數字的印刷的高端雷射印表機系統也使用外部光柵圖像處理器將容易升級的電腦系統佮特定的列印硬體分開。如 EFI 和 Xitron 這款的公司專業從事這款的光柵圖親像處理器軟體開發。

作為顯示系統的應用

隨著 PostScript 成做列印輸出的事實標準,足自然的人嘛向望講共伊用來描述螢幕輸出。一九八空年代尾期 CPU 效能的快速提升佮人對對窗系統興趣的沓沓仔增加,促使人濟擺的試圖開發使用 PostScript 作為主要的顯示技術的顯示系統。

使用 PS 做為著顯示系統有真濟優點,其中之一就是佇其他的系統頂懸使用者毋但愛替螢幕顯示保留點陣圖,而且愛為印表機保留 Type 一字型,佇顯示器頂頭使用 PS 干焦需要保留一套對而且會當彌補這个缺點。另外一个優點是講就是允准「dumbling down」印表機。當 LaserWriter 發佈的時伊是蘋果公司產品線中的功能上蓋為強大嘛是上蓋為貴參貴的機器,按呢伊就需要相當大的處理能力佮記憶體以佇咧合理的時間內生成懸有三百 dpi 解析度的頁面。佮之形成對比的是,使用 NeXT 平台的四百 dpi 印表機曷攏無 CPU,顛倒反伊是使用電腦的 CPU 來進行頁面生,然後共生成的頁面點陣圖傳送到印表機。

但是使用 PostScript 作為視窗系統的一个閣較為主要的優點是伊予使用者使用一組圖形處理子程式就會使開發桌面印刷佮其他大量使用圖形的應用程式,佇咧視窗頂懸做描畫的程式仝款嘛會使無經過任何的轉換直接佇咧印表機頂懸描畫。傳統系統上的桌面印刷應用程式要求程式設計師佇每一个平台的圖形系統上構建圖形化使用者介面(如 Macintosh 上的 QuickDraw 佮微軟視窗頂懸的圖樣裝置介面(GDI)) 編輯器,然後編寫另外的程式將圖形轉換做正確的 PostScript 語言佇咧列印。這款的工課通常就會消磨專案的大部份編程工作,並且是程式錯誤的主要來源。

使用 PostScript 做顯示技術的兩个主要的例是 Display PostScript(_ DPS _)和 NeWS,𪜶兩个戲劇性地佇佗位應用顯示邏輯發生了分歧,佇咧 DPS 中 view 系統留予矣 OS 去處理,毋過佇 NeWS 上整個顯示系統是用 PS 寫成的並且佇一个單一的複雜直譯器中執行。

PostScript 語言

PostScript 是一種圖靈完全的程式語言,通常 PostScript 程式毋是人為生的,是由其他程式來生的。毋過,猶原會當使用手工編制的 PostScript 程式生成圖形抑是進行計算。

PostScript 是一種因為疊起來的解說語言,伊類似 Forth 語言猶毋過使用對 Lisp 語言衍生出的資料結構。這款語言的語法使用逆波蘭表示法,這意味就無需要括號進行分割,但是因為需要記牢咧疊結構,所以需要進行訓練才會當閱讀這種程式。大部份 _ 運算子 _(其他的程式當中講 _ 函式 _)對堆疊中讀變數,而且將運算結構囥到堆疊中間。如數字按呢的 _ 符號字面值 _ 具有共𪜶自身的副本囥佇堆疊的效果。

演算法

比如講:

` ` ` 三四 add 五一 sub mul ` ` `

將執行 ( 三 + 四 ) × ( 五-一 ) 按呢的計算。

予咱來詳細分析一下這是按怎完成的:

三和四攏是符號,𪜶家己共囥咧疊咧,佇這兩个命令了後,疊起來欲變按呢:

` ` ` 四三 ` ` `

add是一種運算子,伊會疊起去上頂懸的兩个元素取出(佇阮的例中是三佮四)、 共伊相加、才閣將結果囥起去疊起去:

` ` ` 七 ` ` `

下跤閣是兩个符號,𪜶共疊起來變按呢(需要注意的是操作干焦局限佇疊頂懸,下跤的元素無受著影響):

` ` ` 一五七 ` ` `

另外一个運算子sub,對疊頂取出兩个元素、第二个減去第一个、然後共結果囥甲疊規堆:

` ` ` 四七 ` ` `

足顯然的mul仝其他兩個運算子仝款,對疊出兩个元素、共伊的乘積囥甲規堆:

` ` ` 二十八 ` ` `

號名變數

頂面的例只是一个古早的逆波蘭表示法計算,當然喔 PostScript 嘛使用變數。詳細講就是伊有一个 _ 字典 _ 用來走揣所有毋是符號的物件;若是查著,彼个名下儲存的值就會壓縮著棧中(抑是講閣較應該講是 _ 執行 _—— 參見後壁的內容); 揣無就倒轉來錯誤。共一个變數囥到字典內底需要使用 _ def _ 運算子,伊用一个名佮一个值作為參數,通過佇頭前使用斜線構起一个名。所以

` ` ` / x 一十五 def ` ` `

起先共名「x 一」囥來疊起去、然後是價數十五、然後執行def,伊會對堆疊中取出「x 一」佮十五,並且將十五寫著字典中「x 一」的下跤。後壁出現的「x 一」(注意莫佮「/x 一」透濫)就會將十五囥到疊仔而且無改變。下跤的代碼會將 x 一的值增加二:

` ` ` / x 一 x 一二 add def ` ` `

疊運算子

PostScript 有幾若个運算子用佇重組或者控制疊:複製(dup)、 挕捒(pop)佮交換(exch)佇咧疊頂懸咧操作,毋過roll旋轉疊起來的某一部份,copy複製某一个特定的部份,index允准象陣列彼个存取堆疊。

處理過程定義

{」和「}」提供一寡編程的工具。「{」共直譯器切換著 _ 延遲執行 _ 模式,所有的物件甚至是運算子佮其他的可執行物件攏囥甲疊中,其中一个例外就是講「}」,伊會疊中央按呢「{」開始的所有的內容,結做一个(匿名)處理過程,然後共囥咧疊起去。

這種結構有幾種無仝的用途,如子程式定義(無頭路的程式予一个變數)、 迴箍、條件等等:

` ` ` x 一零 eq { 零 } { 一 x 一 div } ifelse ` ` `

這段代碼首先愛用eq測試 x 一敢是零;根據結果的無仝將 _ 真 _ 抑是講 _ 假 _ 囥來疊起去。佇咧這个時陣,共兩个過程囥咧疊起來,然後執行ifelse,伊對堆疊中取出三个參數,你若第三个參數是 _ 真 _ 就執行第二个抑無就執行第一个。橫直,若是 x 一是零結果就是零,其他的狀況結果就是一 / x 一。

圖形操作

咧成圖的時陣,PostScript 使用普通的𥰔仔卡爾坐標系。

` ` ` 一百兩百 moveto 三百四百 lineto stroke ` ` `

將「游標」徙到坐標點(一百 , 兩百)然後畫線到(三百 , 四百)。

` ` ` 五十七十 moveto 一百兩百五十八十一百一百 curveto stroke ` ` `

生做一个對(五十 , 七十)到(一百 , 一百)的立方貝窒爾曲線,控制點是(一百 , 兩百)和(五十 , 八十)。

` ` ` 兩百五十兩百五十 moveto ( Wikipedia ) show ` ` `

佇位置(兩百五十 , 兩百五十)使用預先選擇的字型畫出文字「Wikipedia」,字型選擇會當使用譬如講 / Courier findfont 十二 scalefont setfont 按呢的命令串。

圖形上早就佇「使用者坐標系」中建立,咧複製甲確定尾仔輸出的「裝置坐標系」進前𪜶會當進行踅踅、縮放抑是扭曲等等變換。

` ` ` 兩百三百 translate 四十五 rotate ` ` `

共使用者坐標系中的內容徙兩百點、正徙三百點並且複製到裝置坐標系的時陣踅四十五度。

字元「%」用來佇咧 PostScript 程式內底表示注釋。做一个通用的約束,彼每一个 PostScript 攏以字元「% !」開始按呢所有的裝置攏會共解說 PostScript。

參考文獻

本條目部份抑是全部內容出自以 GFDL 授權發佈的《自由線上電腦詞典》(FOLDOC)。

外部連結

  • _ PostScript 語言手冊 _ 第三版(_ PLR 三 _), 以及 _ 補充 _,是事實上規範性檔案,根據伊的封面色水通常稱做「紅皮書」。 頭一版包括 PostScript Level 一,第二版包括講 PostScript Level 二的擴充版本猶閣有 Display PostScript 的文件,第三版包括 PostScript 三(這版 Adobe 放棄矣名中的「level」)但是無閣包括講 DPS。
  • _ PostScript 語言教程佮手冊 _ 是相應的入門圖書,根據封面封面色水通常叫做「藍皮書」。
  • _ PostScript 語言程式設計 _ 是相應的入門圖書,通常號做「綠皮書」。
  • _ PostScript 入門導引 _ 介紹 PostScript 系統入門書籍。
  • _ 數學圖表:幾何佮 PostScript 手冊 _—Bill Casselman 對。
  • _ Thinking in PostScript _,一九九空年 Glenn Reid , Addison-Wesley 對—available online courtesy of the author . 這是一个詳盡的教程。
  • PS-to-PDF 轉換器,使用 Ghostscript 將 Postscript 轉換做 PDF 的線頂轉換器。
  • Type 一个字型格式,PDF 格式。
  • _ T . Greer PrintForum _,PostScript 編程論壇佮討論社群。
  • http : / / www . planiglobe . com / free ( CC by / sa ) PostScript Maps

PostScript hacks

  • Life in PostScript-a PostScript version of Conway's Game of Life
  • PS-HTTPD-a webserver written in PostScript
  • PostScript fractals
  • PostScript barcodes
  • PostScript HTML renderer
  • A PostScript raytracer,from _ Ray Tracing News _ , September 五一千九百八十八 , Volume 一 , Number 八 .