LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 944|回复: 2

转贴一篇:关于中文打印方面的,希望对大家有帮助,并找出最好的方法来

[复制链接]
发表于 2003-6-19 11:31:18 | 显示全部楼层 |阅读模式
Linux中文化之 谈linux 中文打印
文章来源:(LinuxKD) 阅读次数:(696) 更新时间:(2003-2-26 20:06:00)


作者:Rigel

说正经的, 希望此文对大家有用. 这只是一个初稿, 也许我会进一步修改本文, 希望听到您的意见.

另外顺便借此声明, 别给我论坛帐号发私信, 我很少查, 肯定耽误您的事. 如果是一般问题, 最好直接贴到坛子上来, 大家一齐回答岂不更好? 如果您觉的有必要和我私下交流, 请发到 rigel863@yahoo.com. 不过我可不保证 每信必复呦

言归正转,在 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.
 楼主| 发表于 2003-6-19 12:31:52 | 显示全部楼层
Linux下的中文打印问题


  目前Linux上的打印系统通常是用nenscript(或mpage)把非PostScript文件转换成PostScript文件(对PostScript文件则作改变),由Ghostscript对PostScript文件进行转换后输送到打印机上。所以中文打印的关键在于如何生成Ghostscript可以读的中文PostScript文件。但由于没有中文PostScript字库体系,现有的可形成PostScript文件的中文软件(如chpower和中文LaTeX(CJK))大都是把用到的汉字字型以位图或轮廓形式全部存储在PostScript文件中,而不是像西文那样,使用外部的PostScript字库体系。这就导致PostScript文件体积太大,且打印效果欠佳。所以,必须尽快确立中文PostScript字库体系,构造中文PostScript字库,使中文PostScript文件的结构尽可能地接近西文PostScript文件,以保证尽可能地与现有的软件兼容。

  陈向阳先生分析了目前各种中文软件对中文字库的处理方法并参考了日文文字处理软件,总结出一套中文(GB)PostScript字库,初步建立了构造和使用中文(GB)PostScript字库的基本原则。中文(GB)PostScript字库目前包含四种字体,即宋体、黑体、楷体、仿宋体。对每种字体,有94个中文Type1 PostScript字库文件,以PFB(Printer Font Binary)的格式存储,它们分别对应于GB 2312-80编码的94个区(0xA1-0xFE):

字库名         字库文件
gb-songa1~gb-songfe         gbsonga1.pfb~gbsongfe.pfb
gb-heia1~gb-heife         gbheia1.pfb~gbheife.pfb
gb-kaia1~gb-kaife         gbkaia1.pfb~gbkaife.pfb
gb-fangsonga1~gb-fangsongfe         gbfsa1.pfb~gbfsfe.pfb


  这些*.pfb文件是从中文(GB)TrueType字库(TTF)文件产生,作者对LaTeX的中日韩文扩展——CJK软件包中的ntu2cjk程序进行了修改,使之能从中文(GB)TrueType字库(TTF)文件产生中文(GB)PostScript字库文件。目前已有一些中文软件开始使用中文TrueType字库,TrueType字库在中文打印方面比点阵字库所具有的优势是不言而喻的。所以,以后UNIX上中文打印的发展方向是利用TrueType字库更方便地产生高质量的中文输出。

  在上述Type1中文PostScript字库的基础上,定义了四种Type0(复合型)中文(GB)基本字库:

  GB-Song(字库文件GB-Song.ps);

  GB-Hei(字库文件GB-Hei.ps);

  GB-Kai(字库文件GB-Kai.ps);

  GB-FangSong(字库文件GB-FangSong.ps )。

  中文(GB)PostScript字库软件包当前版本为psfonts-gb-1.0.tar.gz,存放地址为ftp://ftp.ihep.ac.cn/pub/chinese/packages/。
发表于 2003-6-19 22:19:17 | 显示全部楼层
多谢

辛苦了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表