设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: IT公社 IT community >> Linux专题 >> Linux应用技巧 >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
在RedHat Linux下通过DM…
教你用SRP服务构建Linux…
通过日志系统保障Linux操…
RedHat Linux系统下安装…
构建基于Linux系统的包过…
教你用FreeVSD改善Linux…
Novell:没有人能阻止我…
Knoppix 只有一张光盘大…
擦亮眼睛认清Linux系统应…
Linux的绝招:免费为硬件…
  揭开Linux下GPL中文Postscript的面纱         
揭开Linux下GPL中文Postscript的面纱
 

本文主要的目的是介绍一套在GPL下发行的中文Postscript字型,它完全可以在Ghostscript下运作,它的使用就和一般英文字型一样的容易。使用方法也完全一样,这实在要感谢杰胜公司的慷慨,使我们能有这一个字型可用。但很可惜的,可能几乎没有人知道如何在Linux下使用它,本书将打开它神秘的面纱。并在最後提出一个perlscript使大家可以使用它来列印简单的文字档。

目前UNIX上有许多套中文列印程序,基本上它们的输出档都是Postscript档。这是因为我们有一个最好的GPLPostscript档列印程序,它就是Ghsoscript。Ghostscript有绝佳的可移植性,它所支援的列印设备范围几乎包括了目前市面上所有可见的设备。而且它的品质就和高阶Postscript印表机一样好,甚至也完全支援彩色列印的功能。

所以在Linux的环境下所用Postscript做为输出档的格式是很自然的选择。但是要让Postscript档支援中文列印也不是一件很容易的事,原因是Postscript基本上所使用的字型格式中主要是为单位元组字集所设计。对於像中文这种双位元组的字集在当初设计时并未考虑,但因为 Postscript语言是一种绘图语言,所以我们当然可以把中文当做图形来处理,不过Postscript所直接支援的一些文字列印功能就不能用了。

不过我提醒各位,这里所提到的字型在目前附在Slackware内的Ghostscript并不能使用,因为它用了一些level2的功能(我猜)。请在使用前先安装3.33版以上的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=====>字型资料档。

要把它放入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)的使用。这可能使程式的速度大受影响,我还不太明白它放弃的原因,也许要试过才知,不过在Ghostscript中速度似乎还可以接受。我们接下来看一下子字型实际上的定义,由於每一个子字型除了Offsets以外都一样,我只列出第一位元是0xF9的字型为例。我把这部份程式放在CHPOST2.ps这个档案中。

它第一码是0xf9的字型定义,其它的也大致相同。它首先由CFT1JacksonFontdict中将各项字型资料拷贝过来,/DataFile就是字型资料档的名称,而/BuildChar就是指到前述的/bc中。值得注意的是最後一项/Offsets,它是一个长度为158*3的阵列,其中每一项就是相对字元在资料档中启始的位置。

至此我们已将所有Type3的字型准备好了,最後我们看一下KaiSu-Regular这个type0的字型如何把前面定义好的89个字型组合在一起,且了解一下Postscript解释器如何读入正确数目的字元。请参考CHPOST3.ps这个档案

在/KaiSu-Regular的定义中我们可以看到它的字元转译模式是6(注),这表示它使用SubsVector中的讯息来解释输入字串。它的SubsVector的定义为/SubsVector<00802158>def 第1个00代表每次读入一个字元,後面叁个数字代表整个字型被分为四段,依次为第0-3号字型,然後由/Encoding中取出实际的字型编号,在这里就刚好是0-3,然後再由/FDepVector中取出实际的字型。上面的过程用意在分辨中文和英文的字型,如果把实际的字型范围列出。

0-0x7f第0号字型/_@ASCII 



0x80-0xa0第1号字型/NotDefFont 



0xa1-0xf9第2号字型/CFT1JacksonFontSupp 



0xfa-0xff第3号字型/NotDefFont

Linux联盟收集整理

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2007-2-15 1:39:44
信息来源:不详 投稿信箱:itqoo@126.com
教程录入:itqoo    责任编辑:itqoo 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持