科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道揭开Linux下GPL中文Postscript的面纱 (3)

揭开Linux下GPL中文Postscript的面纱 (3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文主要的目的是介绍一套在GPL下发行的中文Postscript字型,它完全可以在Ghostscript下运作,它的使用就和一般英文字型一样的容易。使用方法也完全一样,这实在要感谢杰胜公司的慷慨,使我们能有这一个字型可用。

作者:shnyang 来源:赛迪网技术社区 2007年10月20日

关键字: 操作系统 PostScript GPL Linux

  • 评论
  • 分享微博
  • 分享邮件
 

如何由TTF字型转换而得到一个Postscript字型

看到这个标题很多人心跳加速吧!不过我先声明,我在这里只给你一个食谱而没有任何菜色。因为如同中文Postscript字型一样,我们并没有任何免费的TTF字型。所以我也不可能由任何TTF字型做Postscript字型给你,我只能告诉你方法,至於结果你必须自行去尝试了。而且这可能不是一件容易的事,你如果决定要自己一试,那你告检查一下你的配备是否足以胜任。

(1)当然一定要有至少一套的中文TTF字型。

(2)至少16MB最好有20MB以上的记忆体。

(3)至少50MB以上的硬碟空间,越大工作会越舒服,因为你不必把中间产生的档删除。 (4)很多很多的时间及很多很多的耐性,如果你准备好了,就跟着我开始上路吧!

由easyflow同一个子目录取得ttf2limn这支程式,它可以由TTF字型产生一个158字的pk字型档。用法为ttf2limnntk5161.1440pkntk51611440161-s10-H0.75-D0.25-y150/cdrom/big5_k5.01_。它会产生ntk5161.1440pk及ntk5161.tfm二个档。上面的参数和ttf2pk中使用的相似,唯一的不同是原先字型产生的起始内码和给束内码现在简化成上面的161,它是产生字型档中字型的第一码。如果你接着要产生162开头的字型,可用ttf2limnntk5162.1440pkntk51621440162-s10-H0.75-D0.25-y150/cdrom/big5_k5.01_。由同一个位置取得limn这个程式,它可以由上面产生的pk档中fit产生一个type1的外框字。它有很多参数必须调整,下面是我使用的,你可以参考fontutils-0.6中的文件。fontutils-0.6是GNU的产品。

limn-verbose-corner-surround=8 

-filter-surround=12 

-filter-alternative=6 

-subdivide-surround=12 

-tangent-surround=12 

-dpi1440 

-error-threshold=0.6 

-subdivide-threshold=0.01 

-filter-iterations=1 

-reparameterize-threshold=10 

ntk5161

取得bzrto产生type1的字型,其用法为:

bzrto-encoding256-pstype1ntk5161-outputntk5161

将58个字型一一产生,名字依序为:

ntk5160.gsf 

ntk5161.gsf 

. 

. 

ntk5259.gsf

我用perl写了一个程式把产生这些档案的过程自动化,它的用法为:

maketype1ntk52880/cdrom/big5_k5.01_

使用ttf2limn时产生字型的大小,当然越 大越好。这个命令会自动执行上述(1)(2)(3)中所有的动作。下了这个命令,你可以去睡一觉,醒来它可能刚好做完。将上述档中的Type1字元定义取出组成一个字元定义档。在光碟上有一个程式makeup_jackson来做这件事。

#makeup_jacksonntk536001

这会产生一个叫ntk5.hex的档案,并产生一个叫ntk5.pf0的档案。它是由前述的KaiSu-Regular修改而来。第二个参数是字型的UID,要注意不要和其它字型的UID重复了。

上一步中产生的ntk5.hex是一个用hex字串格式编码的档案,我们通常把它转换成二进位档以节省空间及增加处理速度。我提供了hextobin做这件工作,它设计成一个filter的型式,用法为:

#./hextobinntk5.dat

将ntk5.pf0和ntk5.dat装到/usr/lib/ghostscript/fonts中,并在/usr/lib/ghostscript/Fontmap中加入

/ntk5(ntk5.pf0);

拿下面的程式测试看看你的成果,注意程式中第一行载入一个Postscript档,这个档定义了一些在字型中会用到的定义。它可以和其它程式一起得到

/ntk5findfont80scalefontsetfont 

100100moveto

看起来不太难,但至少会花去你一天的时间,有兴趣的人试试看吧。也许我们可以慢慢的建立一套自动的系统,让每个人都可以容易的产生字型。这个程序产生的字型都有一些虚胖的现象,这是因为我们在做fit字型的工作时不论对简单的字型或复杂的字型都用相同的参数,所以简单的字型难免有些虚胖的现象。以全形的逗号而言,在Jackson字型中用8个位元就表示出来了,但在用上述过程以文新的big5_k5.ttf为例则长达53个位元。要消除这种状况可能要一个能以字元为单位设定参数的程式,而且要很多人的参与才能做到。

使用Jackson字型列印中文文字档

在最後我介绍一个很简单的perlscript,它可以用来将中中文件档利用Jackson字型列印。它的功能很简单,但己足够解决大多数中文列印上的问题。其用法为 makeps[-f] 字型名称,如/KaiSu-Regular 欲列印的文件档 产生的Postscript档 使用的字型大小 你可以用它来验证你产生的Postscript字型或是其它任何来源的Postscript字型,它会用横放二栏式的方式列印。当然这个程式还没有经过太多的测试,可能还有很多问题,你可以直接直作者反映问题,如果顺便把解答告诉我是最好不过的了。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章