使用KOffice一段時間了,但由於沒有摸准KOffice中文處理的脾氣,出現過一些很讓人納悶的問題。當然不能一桿子否定KOffice,中文界面做得那麼好,實在是沒有理由不能好好的處理中文。
但KOffice處理中文的確是有下面的問題。
1、顯示中文沒有問題,但是在頁面視圖,字體設置往往失效
2、空格很多時候看不到實際的效果
3、頁面排版容易出現把中文字排到頁面外面
閒來無事,任由自己天馬行空的去想,想KDE的字體匹配機制,想Koffice與其他KDE應用程序在處理中文字上的區別。Koffice在上面的第一個問題中的焦點就是“多字體”處理問題。難道是fontconfig只能匹配到一個字體?難道Kword在設置字體時不通知Fontconfig,以至於字體處理後端只能對一種字體進行操作。我想Kword不會弱智的這個曾次,或許是另外一種原因,頁面視圖需要的一些字體處理技術對中文支持不好,沒有辦法對多種字體進行處理。
空格的問題,我想還是歸結在排版計算上,與排到頁面之外都是這樣的問題。
還有一點,中文打印,是我沒有接觸到的領域,隱約記得,微軟的word在沒有安裝打印機的時候,是不能進行頁面預覽的,這或許就是根結所在。這是一個很好的方向,值得我去關注!
最近一段時間,花在論壇上的時間多了些,結交了一些FreeBSD桌面應用的同好,自然冷落了博客和關注我這個博客的朋友們,所以還是要對自己說,“加把勁”
轉一篇關於中文打印的老文章,就拿它作為一個新的起點!
作者:Rigel
言歸正轉,在 linux 下打印是件麻煩事, 中文打印由甚. 為什麼哪? 將屏幕上看到的文字 印到紙上, 要經過兩步: 1. 應用程序生成 postscript 文件; 2. 將該文件送 到打印機 (直接或通過 ghostscript). 讓我們先從第二步看起.
一. 如何打印中文 postscript 文件?
最大的問題是一般打印機不支持或不帶中文字體. 一般我們使用 ghostscript, 但 ghostscript 對中文字體的支持也不是很完美. 大多數情況下需要打補丁. 目前有以下幾種解決方案, 根據我個人的偏愛程度為序.
1. 直接 patch ghostscript 使其支持 truetype 字體. 可參看該網站. 這是目前 最為簡單的方法. 缺點是需要 > 6.0 版的 ghostscript, 該版目前還沒有以 GPL 施放, 任何 linux都不會預裝, 需要自己下載安裝.
2. 使用 CID 字體. CID 是 adobe 為亞洲文字設計的字體, 打破了 type1 字體只 能容納 256 個字符的限制. ghostscript (> V5.5?) 直接支持 CID 字體, 無需 補丁. 可參看同一網站如何設置. 本來這應該是最好的方案, 因為不要打補丁.可惜 CID 字體太少了, 故我將此列為第二.
3. Patch ghostscript 使其支持 VFlib, 通過 VFlib 支持 truetype 字體. 優點 是支持老的 ghostscript 版本 (中文有 for 5.5 的 patch, 日文甚至有 for 4.x 的), 支持字體變形等. 缺點是需要額外安裝 VFlib. Turbolinux 6.0 以上及 CLE v0.9p1以上均使用了該方法. 可以到它們相應的軟件包中找補丁.
4. 陳向陽的 gbpfb 包, 將中文 truetype 字體轉換成 type1 pfb 字體, 由於 type1 字體只能容納 256 個字符的限制, 一個 truetype 字體將會生成 30-40個 pfb 字 體, 再由一個前端文件控制. 當年這是我們中國人唯一知到的打印中文 postscript 文件的方法. 我還記得用此法第一次從 netscape 打印出中文的驚喜. Turbolinux 4.x 以下及藍點等中文發布均使用了該方法. 但現在與前述的 1-3 法相比, 顯得有 些簡陋, 存在一些難以克服的毛病, 已經越來越少的被使用了. 如果您想要可以在 上面提到的幾個中文 linux 中找到.
5. 在 postscript 文件中內嵌中文點陣字體. 優點是連 ghostscript 都不需要了, 直接送到任何支持 postscript 的打印機上就可打印. 缺點是生成的文件龐大, 打印出的質量欠佳. Latex CJK 生成的 postscript 文件即采用此法. 前幾天 見網友的貼子, 說可以直接打印文傑的 postscript 文件, 我有些懷疑它也是用 該法. 最後, 使用 1-4 法都需要通過 ghostscript 將文件發往打印機. 有兩種用法:
直接使用, 如: gs -q -dBATCH -sDEVICE=printer-type -sOutputFile=\lpr - 或設置 filter 使 lpr 自動調用 ghostscript, 看 ghostscript 的文檔吧, 我 懶得寫了 :)
二. 我能打印中文 postscript 文件, 可是還是不能從 xxx 程序中打印中文!?
這就需要我們看看打印過程的第一步, 即應用程序生成postscript 文件. 目前有多少 linux 下的程序能生成支持中文的 postscript 文件? 少只又少, 真正不需要任何補丁就能 work 的我知道的有三個netscape/mozilla/abiword(>=0.12).主要問題是很少有程序能正確處理中文 font. 在 UNIX/LINUX 世界沒有統一的打印API, 任何程序想打印, 必須自己寫 code 生成 postscript 文件, 很難想像所有程序員都原意並有能力考慮中文 postscript 字體問題. 現在 gnome-print 和 QTprinter class 都是試圖產生一個公用 API 以便應用程序不必自己處理生成 postscript的問題. 可惜二者都處於起步階段, 僅僅聚焦於 type1 字體, 還沒顧的上考慮中文的問題. 也就是說目前所有 GNOME/KDE 應用程序, 只要使用這兩個 API, 都不能生成正確的中文 postscript 文件, 不能印出中文字. 台灣有人(見CLE的QT包)寫了 QT printer 的patch, 但還不是很完善; 沒聽說有 gnome-print 的中文 patch.