歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> GPL的中文Postscript字型安裝、原理及使用

GPL的中文Postscript字型安裝、原理及使用

日期:2017/3/6 15:37:48   编辑:關於Unix
本文主要的目的是介紹一套在GPL下發行的中文Postscript字型,它完全可以在http://edu.itbulo.com/tools/system/Ghost/' >Ghost script下運作,它的使用就和一般英文字型一樣的容易。使用方法也完全一樣,這實在要感謝傑勝公司的慷慨,使我們能有這一個字型可

本文主要的目的是介紹一套在GPL下發行的中文Postscript字型,它完全可以在http://edu.itbulo.com/tools/system/Ghost/'>Ghostscript下運作,它的使用就和一般英文字型一樣的容易。使用方法也完全一樣,這實在要感謝傑勝公司的慷慨,使我們能有這一個字型可用。但很可惜的,可能幾乎沒有人知道如何在Linux下使用它,本書將打開它神秘的面紗。並在最後提出一個perlscript使大家可以使用它來列印簡單的文字檔。

目前UNIX上有許多套中文列印程序,基本上它們的輸出檔都是Postscript檔。這是因為我們有一個最好的GPLPostscript檔列印程序,它就是Ghsoscript。http://edu.itbulo.com/tools/system/Ghost/'>Ghostscript有絕佳的可移植性,它所支援的列印設備范圍幾乎包括了目前市面上所有可見的設備。而且它的品質就和高階Postscript印表機一樣好,甚至也完全支援彩色列印的功能。

所以在Linux的環境下所用Postscript做為輸出檔的格式是很自然的選擇。但是要讓Postscript檔支援中文列印也不是一件很容易的事,原因是Postscript基本上所使用的字型格式中主要是為單位元組字集所設計。對於像中文這種雙位元組的字集在當初設計時並未考慮,但因為 Postscript語言是一種繪圖語言,所以我們當然可以把中文當做圖形來處理,不過Postscript所直接支援的一些文字列印功能就不能用了。

不過我提醒各位,這裡所提到的字型在目前附在Slackware內的http://edu.itbulo.com/tools/system/Ghost/'>Ghostscript並不能使用,因為它用了一些level2的功能(我猜)。請在使用前先安裝3.33版以上的http://edu.itbulo.com/tools/system/Ghost/'>Ghostscript,我幫各位將它編譯成gs333.tgz,這個文件也在光盤上可找到。不過其中並沒有字型,請各位自己去把字型找來安裝。(沿用2.61的字型也無不可,記得把Fontmap拷到/usr/lib/ghostscript/3.33中)

Jackson字型的安裝

Jackson的中文Postscript字型可以在NCTUCCCA.EDU.TW://NeXT/Chinese/KaiSu.pkg_0_7.tar.gz中取得。但它沒有辨法直接在Linux下列開,我把它解開後取出有用的部份並把它放在光盤中。

Jackson的字型分成二個檔,一個是用來建立它的Postscript語言檔,另一個是放字型定義的檔。

KaiSu-Regular=====>字型定義檔

KaiSu-Regular.dat=====>字型資料檔

要把它放入http://edu.itbulo.com/tools/system/Ghost/'>Ghostscript內的步驟為

(1)將上述二個文件放入/usr/lib/ghostscript/fonts中。

(2)修改/usr/lib/ghostscript/Fontmap在最後加入/KaiSu-Regular(KaiSu-Regular); 不要忘了最後的分號。

(3)用下列文件測試它的功能。

你應該可以看到大大的觀念篇三個字。

#!

/KaiSu-Regularfindfont80scalefontsetfont100100moveto

showpage Jackson字型的原理

如果你只是單純的想使用字型,那這一節就可以省略了。這一節是給那些對Jackson字型原理有興趣,或想自己做其它Postscript字型的人看的。我們可以由TTF字型用和Jackson相同的方法產生字型。

下文中提到三個程序都可在光盤上找到,它們的檔名分別是CHPOST1.ps,CHPOST2.ps和CHPOST3.ps。你應該在看下文前先把它們印一份在手邊參考。

由於在原先的Postscriptlevel1中,Postscript所提供的Type1和Type3字型均只適用於小於256字的字集。所以 Postscript在level2中提供了額外的type0字型(注2),一般稱為合成字(compositefont),它本身並沒有有關字型的資料。相反的它是用來將多個不同的字型組合成一個字型,也就是說一個13095字的字集,須要52個字型才能裝得下,我們可以使用一個type0字型來代表這些字型。更清楚的說,一個雙位元組的字集有二個位元組,我們可以將第一個位元組看成字型碼,第二個位元組看成字型索引。有興趣的人可以在附錄中找到一個對Postscript字型詳細的說明,以下我們只針對Jackson字型如何由雙位元組字串選到正確的字型定義的過程做說明。我假設你對 Postscript組識字型的方法有一定了解,我盡量重復使用到的字型功能,如仍有不了解之處請參考附錄或 PostscriptLanguageReferenceManual。

首先我把KaiSu-Regular中的一小段程序碼列出並在其中加上一些注解,我把它放在光盤中的CHPOST1.ps中。以%%!開頭的注解是執行到該行時stack的狀況(注1),它並不在原先的字型中。如果程序看不懂沒關系,你可以直接由我後面的說明了解運作的過程。注1:Postscript是一種堆疊導向的語言,它和forth有些類似,同樣是采後序的運算式並將結果放在堆疊之上。注2:在有些levelI的系統中也有這個延伸。

一個Jackson字型為一個Type0的字型,它被分為89個子字型。每一個子字型有158個字元,這剛好就是BIG5的編碼方式。BIG5的第一碼為0xa1-0xf9共59個不同的碼,而其第二碼為0x40-0x7e及0xa1-0xfe共158個不同的碼。所以在Jackson中采取8/8的映射方式,上面的/bc就是每一個子字型中的BuildChar程序,這個程序是type3字型用來畫字的程序,Postscript在呼叫這個程序之前會把字型字典和字型索引堆進堆疊之中,而這個程序在執行完後應把它們移出堆疊。

因為中文字集的字元數實在太多,我們不能如英文字集般把所有字元的定義都一次載入記憶體中。上面的程序就是用來做動態載入的動作,它只在實際用到時才去載入字型,不過這個程序還有可改進之處,我們可以把它每次載入的定義存在字型字典之中,如此當第二次用到時就不必每次去文件中載入字型定義了。

上面的程式還有一個可議之處,它放棄了字型快取(fontcache)的使用。這可能使程式的速度大受影響,我還不太明白它放棄的原因,也許要試過才知,不過在http://edu.itbulo.com/tools/system/Ghost/'>Ghostscript中速度似乎還可以接受。

我們接下來看一下子字型實際上的定義,由於每一個子字型除了Offsets以外都一樣,我只列出第一位元是0xF9的字型為例。我把這部份程式放在CHPOST2.ps這個

Copyright © Linux教程網 All Rights Reserved