bg5ps -- BIG5 文字檔印表輔助程式 By 金振山 Oct 1, 1998 1. bg5ps 簡介 bg5ps 是一個 使用巨蟒描述語言(Python Scrpting Language)寫的一個小程式, 能夠利 用幾套免費的 Truetype 中文字型將一般用 BIG5 編碼的文字檔轉換成能 夠在沒有中文字型的 postscript 印表機或是只有 ghostscript 的系統 上印列 的 postscript 檔案。 bg5ps 也可以拿來當做過濾器 (filter),用來過濾在 Linux 上的 Netscape 或是 mpage 產生的 postscript 檔案來印列其中所包含的 BIG5 中文字元。因為 bg5ps 使用的是 Truetype 字型而非矩陣字型,當在雷射 印表 機上或是字型較大時,可以獲得比較好的印列品質。 2. 安裝 安裝過程大致如下: 1. 安裝 Python。 先檢查你的系統中是否有已經安裝 Python 1.4/1.5/1.51。如果你的系統是 Linux RedHat 4.2/5.0/5.1,那你應該已經有 Python 了。 2. 取得 ntu_*.ttf 或 moe_*.ttf 等中文字 型檔。 你可以在下列地方得到中文字型檔 + ftp://ftp.ntu.edu.tw/Chinese/ifcss/software/fonts/bug5/ms-win + ftp://ftp.ifcss.org/pub/software/fonts/big5/ms-win 在 Chinese Linux Extension 的 CDROM 中也有相關字型的 rpm 檔。 3. 先建立你想要安裝 bg5ps 的目錄,將 bg5ps-1.1b2.tgz 解壓縮到你想要的 目錄下。如果你的 tar 有支援壓縮格式,使用 tar zxvf bg5ps-1.1b2.tgz 如沒有支援,使用 gunzip bg5ps-1.1b2.tgz tar xvf bg5ps-1.1b2.tar 4. 編譯 ttf2psm.c。 執行 gcc -O2 -fomit-frame-pointer ttf2psm.c -o ttf2psm 將產生的 ttf2psm 放在與 bg5ps 相同的目錄 下,或者你可以放在你想要的 目錄下,然後在設定檔中加上一行 ttf2psmPath="/your/ttf2psmpath/" 來標明 ttf2psm 的路徑。 5. 編輯設定檔(Configuration file)。 請參考以下及 所附的 bg5ps.conf 檔。裡面有各個參數的說明。其中比 較 重要的是上述的 ttf2psmPath 以及 ChineseFontPath 這兩個參數。在本版 的 bg5ps 中,bg5ps 會依下列的順序去尋找設定 檔案 1. ~/.bg5ps.conf 2. /etc/bg5ps.conf 6. 測試。 進到你用來安裝 bg5ps 的目錄裡下達 bg5ps -if test.big5 -of test.ps 如果你的設定都沒有問題,那應該會有一個叫 test.ps 的檔案產生你可以試 著用 gv+ghostscript 或是 ghostview+ghostscript 來看產生的檔案有沒有 錯誤。 如果有問題,請參考程式輸出的錯誤訊息並檢查你的設定檔。除了 用設定檔案來設定印列參數,你也可以在命令列來控制一些印列的 參數。請 用 bg5ps -h 來看有那些參數可以使用。 3. 使用方法 bg5ps 可以以獨立(stand along)或是當成過濾器(filter)來使用。 1. 以獨立方式執行。 如果你的設定檔沒有問題,在大多數的時候你只須下達 bg5ps -if yourfile.big5 -of yourfile.ps 就可以將 big5 編碼的檔案轉成可以印列的 postscript 檔案。 在大部份的 類 UNIX 的系統裡,使用 lpr yourfile.ps 就可將 postscript 檔案印出。需要注意的是你必須要有 postscript 印表 機或是用 ghostscript 模擬 postscript 的印表 機及印表過濾器。此外你 還需要確定你是否正確的指定印表機。 如果你想要將 mpage 及 netscape 所產生的 postscript中的 big5 碼做處 理,使其成為可以印列 big5 中文的 postscript檔。 那你需要加上 "-nps y" 這個選項如下 bg5ps -nps y -if netscape.ps -of cnetscape.ps 因為在 netscape 產生的 postscript 檔中的英文是可變寬度的字型, 所以 有時會有和中文對不齊的狀況發生。如用 mpage 則沒有這方面 的問題。用 mpage+bg5ps 是用來預覽大的中文檔案節省紙張的好方 案。 2. 當成過濾器使用。 bg5ps 也可以利用 UNIX 中的管 道(pipe)當成過濾器使用。方法如下 cat yourfile.big5 | bg5ps > yourfile.ps cat yourfile.big5 | bg5ps | lpr 或 cat netscape.ps | bg5ps -nps y > yourfile.ps cat netscape.ps | bg5ps | lpr 4. 選項 bg5ps 有下列的選項可以使用 * -fp ChineseFontPath: 指定中文字型的路徑(預設值: 與 bg5ps 同) * -fn ChineseFontName: 指定中文字型的檔案名稱(預設值: ntu_kai) * -o [0|1]: 0 不輸出奇數頁,1 輸出奇數頁(預設值: 1) * -e [0|1]: 0 不輸出偶數頁,1 輸出偶數頁(預設值: 1) * -s num: 指定輸出字型的大小(預設值: 12) * -ls num: 指定行距(預設值: 6.0) * -cs num: 指定字距(預設值: 2.0) * -lm num: 指定左邊界(預設值: 72.0) * -rm num: 指定右邊界(預設值: 72.0) * -tm num: 指定上邊界(預設值: 72.0) * -bm num: 指定下邊界(預設值: 72.0) * -if filename: 指定輸入檔檔名 * -of filename: 指定輸出檔檔名 * -cf filename: 指定設定檔(預設值: /.bg5ps.conf) * -nps [y|n]: y 使用 nps 模式,n 不使用 nps 模式(預設值: n) 範例: bg5ps -fn ntu_kai -e 0 -o 1 -s 18 -cs 3 -if mybig5.txt -of myps.ps 5. 設定檔(Configuration file) bg5ps 的設定檔其實每一行都是 python script 語言的一 行指令,由 bg5ps 主 程式去呼叫執行,所以可能有安全性上的 問題。請記得要將設定檔改成唯讀。因 為設定檔也是 python script,所以 每一行的開始是不能有空格的。 bg5ps 設定檔有下列參數可以改變 * chineseFontPath: 指定中文字型的路徑(預設值: 與 bg5ps 同) * fontName: 指定中文字型的檔案名稱(預設值: ntu_kai) * oddPages: 0 不輸出奇數頁,1 輸出奇數頁(預設值: 1) * evenPages: 0 不輸出偶數頁,1 輸出偶數頁(預設值: 1) * size: 指定輸出字型的大小(預設值: 12) * lineSpace: 指定行距(預設值: 6.0) * chrSpace: 指定字距(預設值: 2.0) * leftMargin: 指定左邊界(預設值: 72.0) * rightMargin: 指定右邊界(預設值: 72.0) * topMargin: 指定上邊界(預設值: 72.0) * bottomMargin: 指定下邊界(預設值: 72.0) 範例: chineseFontPath="/home/cschin/lib/cfonts" fontName="ntu_kai" oddPages=1 evenPages=1 6. 注意事項與臭蟲 為了可攜性,bg5ps 產生的 postscript 檔案中是包含字型 的,這樣可以在沒有 連到postscript 印表機的電腦上執行,然後用磁片 或是用網路傳到可以印的機 器上,我自己用了一年了,大致上沒有很大的 問題,有時也許是字型資料太大有 些印表機可能無法處理,這樣你可能需 要用比較好的 postscript 印表機,不然 就是用 Linux+ghostscript,這 樣的組合到現在我還沒有出過甚麼問題。唯一要 注意的是如果用 HP 噴墨 印表機,最好在設定 ghostscript 的選項時加上 -dDepletion=2 可改善用墨過多的情況。其他的噴墨印表機我 就沒有試過了。也 許以後看看有沒有機會寫用矩陣字型的版本來改善噴墨 過多的問題。 bg5ps 1.1b2 改寫了 nps 模式下判斷中文 big5 編碼部份的 postscript 碼,所 以現在應該在大部份的狀況下都能夠正確判斷 netscape 所產生的 postscript 的 big5 碼。我用的 netscape 版本是 4.05,mpage 是 2.4,如使用其他版本, 請自行試用看看。處理 netscape 產生的 postscript 檔時,因為使用可變字型 也沒有以 "行" 為單位輸出 postscript 碼,所以有時會有一些重疊的現象,還 沒有想到 方法解決這個問題,如果 HTML 檔沒有很複雜的編排的時候多半沒有甚 麼 問題。 為了考慮到 python 1.4 的使用者,bg5ps 用了一個 python 舊的的模組 regex ,在 python 1.5.* 之後這個模組被 re 模組取代,雖然 1.5.* 版還有支援 regex,但不被鼓勵。 所以如果還有機會出新版本,我將會改用 re 模組。 如果你發現有甚麼問題,臭蟲,或是建議,請電郵到我的電子郵件信 箱 cschin@u.washington.edu,謝謝。 如果你覺得這個程式好用,如果方便,可以和我交換明信片給我鼓勵 一下,我的 地址是 (98及99年) Chen-Shan Chin PO BOX 95644 Seattle, WA 98145-2644 U.S.A. 如果我收到你的明信片,我也會寄給你 Seattle 當地或是我出去旅遊時 買的明 信片,謝謝。 7. 版權 bg5ps 1.1b 程式使用 GNU General Public License,請參照所付的 COPYING.txt 檔案。 ttf2psm.c 是改自 Liangsheng Wu 的 ttf2ps.c, 請參考 ttf2ps.doc 檔。