目前 Solaris 發行版本中的 mp 列印過濾器已經過增強。為了在語言環境中產生可列印國際性文字的輸出檔,最新的 mp 可在內部以三種不同模式運作。可用的模式為:
使用語言環境特定的字型配置檔 mp.conf
使用語言環境特定的 PostScript prolog 檔 prolog.ps
以 Xprt (X 列印伺服器) 用戶端的方式運作
以下章節說明何時使用特定的列印方法, 以及 mp 針對這些列印方法使用哪種配置和支援檔案。
若是沒有在指令行中指定 -D 或 -P 選項,此列印方法即為預設值,除非 prolog.ps 檔案存在於 /usr/openwin/lib/locale/$LANG/print 或是 /usr/lib/lp/locale/$LANG/mp 目錄中。該 prolog.ps 檔案強制 mp 使用檔案中的 PostScript 內嵌式字型。即使 prolog.ps 存在於語言環境中,使用 -M 選項會忽略 prolog.ps 檔,並使用 mp.conf 檔案 (若存在的話) 做為替代。
此方法使用 /usr/lib/lp/locale/$LANG/mp/mp.conf 字型配置檔。您可能不需要變更此檔案,除非需要使用替代字型列印。此檔案可以使用 TrueType、Type 1 或pcf 字型來配置。
/usr/lib/lp/locale/C/ 目錄包含一般用於此列印模式的 .ps 列印頁面版面配置檔案。新增及自訂 prolog 檔案 中提供如何自訂這些檔案的說明。
若是指令行中沒有指定 -D 或 -P 選項,並且存在 /usr/openwin/lib/locale/$LANG/print/prolog.ps ,那麼 prolog.ps 檔案即前置至輸出。根據 .ps prolog 頁的列印樣式,版面配置檔案亦前置至輸出。
此列印方法只利用 PostScript 字型檔。新增及自訂 prolog 檔案中說明 prolog.ps 的檔案自訂。
以 mp 做為 Xprt 用戶端,以使 mp 可列印 Xprt 列印服務所支援之網路連線印表機的輸出。做為 Xprt 用戶端,mp 支援 PostScript 和多種版本的 PCL。
Xprt 用戶端依據下列規則來試圖連線到 Xprt 伺服器:
當 -D printer_name@machine[:dispNum] 或 -P printer_name@machine[:dispNum] 選項搭配 mp 指令一起使用,mp 會以 printer_name 嘗試連線到 machine[:dispNum] 上的 Xprt 列印服務。
如果上述連線到 machine[:dispNum] 的嘗試失敗或是指定給 -D 或 -P 的引數只有 printer_name,那麼 mp 指令會檢查支援 printer_name 引數之 Xprt 伺服器的 XPSERVERLIST。例如:
system% setenv XPSERVERLIST "machine1[:dispNum1] machine2[:dispNum2] ..." |
如果未找到任何使用上述規則的伺服器,mp 會檢查 XPDISPLAY 環境變數是否設定為 machine[:dispNum]。例如:
system% setenv XPDISPLAY "machine[:dispNum]" |
如果 XPDISPLAY 變數未設定或是無效狀態,則 mp 會嘗試連線到預設顯示:2100。如果預設顯示值也是無效的,mp 會出現錯誤訊息。
/usr/lib/lp/locale/C/mp 目錄包含 Xprt 用戶端的 .xpr 列印頁面範例版面配置檔案。這些範例檔是針對 300 dpi 印表機所建立的。如果目標印表機具有不同的 dpi 值,範例檔的 dpi 值會自動地轉換為與目標印表機相符的解析度。
配置檔提供新增或變更字型項目或字型群組項目的彈性。
系統預設的配置檔是 /usr/lib/lp/locale/$LANG/mp/mp.conf,其中 $LANG 是執行列印之語言環境中的語言環境變數。您可以使用 -u config.file path 選項來指定個人使用的配置檔。
一個針對相容性而被編碼為字元的 ligature 或變數文字影像稱為表示格式。mp.conf 檔案主要是用來將語言環境中的中間字碼點,對映至用來列印該字碼點的字型編碼中的表示格式。
中間字碼點可以是寬字元或是「可攜式版面配置服務 (PLS)」層的輸出。若要進行「複合文字版面配置」列印,則中間字碼點必須是 PLS 輸出。由 mp 產生的預設中間字碼是 PLS 輸出。
目前支援的字型格式為可攜式編譯格式 (PCF)、TrueType 以及 Type1 格式。同時支援系統與印表機內建的 Type 1 字型。請注意下列關於 mp.conf 配置檔的格式與內容的資訊:
每行必須以有效的關鍵字 (指令) 起始。
關鍵字的引數必須與關鍵字出現在同一行。
以 # 字元當做起始的行將被視為註釋直到該行結尾。
以 0x 做為起始的數值引數將解譯為十六進位數。
mp.conf 檔案中不同的區段包括:
mp.conf 檔案中的字型別名區段是用來定義每個用於列印字型的別名。此區段中的每一行皆為如下的格式:
FontNameAlias font-alias-name font-type font-path
為字型名稱加入別名的一般慣例是在後方加上表示該字體為羅馬字體、粗體、斜體或粗斜體的字母 (R、B、I 或 BI),藉以指定字型的編碼/程序檔名稱。
例如,/usr/openwin/lib/X11/fonts/75dpi/courR18.pcf.Z,因為它是 iso88591 Roman 字型,所以可以指定 iso88591R 別名。
.pcf 的字型類型值是 PCF、Adobe Type1 的字型類型值是 Type1 以及 TrueType 的字型類型值是 TrueType。只有這三種字型可以在 mp.config 檔案中配置。
字型檔案的絕對路徑名稱。若是 Type1 印表機內建字型,則只需指定字型名稱,例如 Helvetica。
FontNameAlias prnHelveticaR Type1 Helvetica
您可以結合相同類型的字型以構成字型群組。字型群組的格式如下列所示:
FontGroup。
字型的群組名稱。
字型類型。只為相同類型的字型建立字型群組 (PCF,Type1,TrueType)。
字型群組中的羅馬字型名稱。
字型群組中的粗體字型名稱。
字型群組中的斜體字型名稱。
字型群組中的粗斜體字型名稱。
針對建立群組,只需要羅馬字型登錄。粗體、斜體以及 粗斜體字型為選擇性的。例如,不同類型的字型是用來顯示郵件或新聞文章的標題行。若是只定義 Roman 字型,則此字型是用來代替其他字型。
mp.conf 檔案的對映區段從中間字碼的範圍對映至語言環境中的字型群組。這個區段中每一行的格式如下所示:
MapCode2Font。
一個 4 位元十六進位值是以 0x 開頭,指出字碼範圍的起點以對映至一個或多個字型群組。
表示需要對映的字碼範圍結尾。如果此值是 '-',則其中只有單一中間字碼點對映至目標字型。
將列印其表示格式的 Type1、PCF 或 TrueType 字型群組。
mp.conf 檔案的關聯區段可讓每個字型與共用物件產生關聯,而該物件會將中間字碼點對映至字型編碼中的表示格式。這個區段中每一行的格式如下所示:
CnvCode2Font。
為字型所定義的別名。
可依序透過中間字碼格式取得該對映功能,並以字型編碼回傳,以取得文字影像索引,並繪製文字影像。
包含對映功能的 .so 檔案名稱。您可以使用 dumpcs 中的公用程式,來查找 EUC 語言環境的中間字碼集。
目前 mp (1) 所使用的 TrueType 引擎,只能使用格式 4 和 PlatformID 3 cmap。您只能配置 Microsoft .ttf 檔案。此外,字元對映編碼必須是 TrueType 字型引擎的 Unicode 或符號才能正確地作業。由於 Solaris 環境中的大部分 .ttf 字型都遵循這些限制,因此您可以在 mp.conf 檔案中對映 Solaris 軟體的所有 TrueType 字型。
您可以建立一個對映到字型的共用物件,以與 PCF type1 X 邏輯字型描述 (XLFD) 相應。然後您可以建立從中間字碼範圍對映到 XLFD 所指定之編碼的共用物件。例如:
-monotype-arial-bold-r-normal-bitmap-10-100-75-75-p-54-iso8859-8
相對應的 PCF 字型為:
/usr/openwin/lib/locale/iso_8859_8/X11/fonts/75dpi/ariabd10.pcf.Z
由於此字型是以 ISO 8859-8 編碼的,因此共用物件必須在中間字碼和相應的 ISO 8859-8 字碼點之間對映。
若是 TrueType 字型使用 XLFD:
-monotype-arial-medium-r-normal--0-0-0-0-p-0-iso8859-8
擁有相對應的字型:
/usr/openwin/lib/locale/iso_8859_8/X11/fonts/TrueType/arial__h.ttf
您應該在中間字碼與 Unicode 之間對映,因為上一個 TrueType 字型的 cmap 編碼為 Unicode。在這個 TrueType 字型的範例中,假設 en_US.UTF-8 語言環境中與希伯來字元 (由 PLS 層所產生) 相對應的中間字碼範例為 0xe50000e9。由於該字型為 Unicode 編碼,因此當您傳送 0xe50000e9 時,其輸出會對應於 Unicode 中的表示格式,您可依此方式設計相對應 .so 模組中的功能。這裡的範例是 0x000005d9。
對映功能的函式原型應該為:
unsigned int function(unsigned int inter_code_pt)
下列是可在 mp.conf: 檔案中使用的可選關鍵字/值對。
PresentationForm WC/PLSOutput
預設值為 PLSOutput。若是使用者指定 WC,則所產生的中間字碼點為寬字元。針對 CTL 列印,應該使用此預設值。
如果該語言環境為非 CTL 的語言環境且其鍵盤值是 PLSOutput,則該值會被忽略,mp 也會產生寬字元字碼做為替代。
如果語言環境支援 CTL,您可以使用列於下表的可選關鍵字/值對。這些變數可以假設表格中間欄中所給定的任何可能值。
表 7–1 可選關鍵字/值對
可選關鍵字 |
可選值 |
預設值 |
---|---|---|
Orientation |
ORIENTATION_LTR/ ORIENTATION_RTL/ ORIENTATION_CONTEXTUAL |
ORIENTATION_LTR |
Numerals |
NUMERALS_NOMINAL/ NUMERALS_NATIONAL/ NUMERALS_CONTEXTUAL |
NUMERALS_NOMINAL |
TextShaping |
TEXT_SHAPED/ TEXT_NOMINAL/ TEXT_SHFORM1/ TEXT_SHFORM2/ TEXT_SHFORM3/ TEXT_SHFORM4 |
TEXT_SHAPED |
下列程序中的範例,將展示如何在配置檔中加入新的 PCF、TrueType 或 Type1 印表機內建字型。
請完成此程序,以更換目前所配置的字型。在頭兩個步驟中,用來顯示範圍 0x00000021 - 0x0000007f 中字元的 PCF 字型,由 TrueType 字型來取代。
在增加新的字型之前,請先在配置檔案中查看與目前配置的字型相對應的各種元件。
FontNameAlias iso88591R PCF /usr/openwin/lib/X11/fonts/75dpi/courR18PCF.Z FontNameAlias iso88591B PCF /usr/openwin/lib/X11/fonts/75dpi/courB18PCF.Z . . . FontGroup iso88591 PCF iso88591R iso88591B . . . MapCode2Font 0x00000020 0x0000007f iso88591 . . . CnvCode2Font iso88591R _xuiso88591 /usr/lib/lp/locale/$LANG/mp/xuiso88591.so CnvCode2Font iso88591B _xuiso88591 /usr/lib/lp/locale/$LANG/mp/xuiso88591.so
例如,您可以將 /usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf 字型對映到 en_US.UTF-8 語言環境。由於 HG-MinchoL.ttf 是 Unicode TrueType 字型檔,因此使用 .so 模組對映功能即可直接傳回內送的 ucs-2 字碼點。
unsigned short _ttfjis0201(unsigned short ucs2) { return(ucs2); }
若要對映 PCF 檔案,例如 /usr/openwin/lib/locale/ja/X11/fonts/75dpi/gotmrk20.pcf.Z,請檢查 /usr/openwin/lib/locale/ja/X11/fonts/75dpi/fonts.dir 檔案中與 XLFD 相應的下列編碼:
-sun-gothic-medium-r-normal--22-200-75-75-c-100-jisx0201.1976-0
若是 jisx0201 編碼方式,請準備好從 ucs-2 對映至 jisx0201 的共用物件。取得對映表,以建立 .so 模組。若是 Unicode 語言環境,請在 ftp.unicode.org/pub/MAPPINGS/ 目錄中尋找對映至 Unicode 的字元集。
使用這些對映來撰寫 xu2jis0201.c 檔案:
unsigned short _xu2jis0201(unsigned short ucs2) { if(ucs2 >= 0x20 && ucs2 <= 0x7d ) return (ucs2); if(ucs2==0x203e) return (0x7e); if(ucs2 >= 0xff61 && ucs2 <= 0xff9f) return (ucs2 - 0xff60 + 0xa0); return(0); }
當您建立對映檔時,請包含所有 usc-2 至 jisx0201 的實例。
cc -G -o xu2jis0201.so xu2jis0201.c
下列程序中的範例,將展示如何建立共用物件檔案。
若要新增字型,請編輯下列範例中與 mp.conf 檔案中區段相應的行。
此範例顯示如何新增 TrueType 字型。.so 路徑會指向 xu2jis0201.so 檔案。
FontNameAlias jis0201R TrueType /home/fn/HG-Minchol.ttf FontGroup jis0201 TrueType jis0201R MapCode2Font 0x0020 0x007f jis0201 CnvCode2Font jis0201R _ttfjis0201 <.so path>
若要新增 PCF 字型,請將關鍵字由 TrueType 變更為 PCF。
使用變更後的 mp.conf 檔案來呼叫 mp 指令,以使用新字型來列印範圍 0x0020-0x007f。
若要對映其他的日文字元範圍,您可以使用同一個 so 檔案來達成。例如,您可以對映範圍 0x0000FF61-0x0000FF9F。
若要維持向後相容性,您可以使用 /usr/openwin/lib/locale/$LANG/print/prolog.ps 檔案在目前的語言環境中建立輸出。當您使用 prolog.ps 檔案時,不需要任何配置檔。
您可以在 /usr/lib/lp/locale/en_US.UTF-8/mp 目錄中找到 mp.conf 範例檔。