热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux中文字型的转换与内嵌

Linux中文字型的转换与内嵌--Linux通用技术-Linux编程与内核信息,下面是详情阅读。
  不论是 Postscript 文件或 PDF 文件,都可以直接内嵌所需的字型,可以只提示所需的字型名称与每个字在字型文件中的编码索引等。后者的档案大小当然比前者来得小,但前提是文件内所使用的字型名与字型规格要有一个通用的标准,如此该份文件才能在各种环境下阅读与打印。故一般只包含 ASCII 或 ISO8859-1 文字的 Postscript文件是不内嵌字型的,但是一份中文文件在目前常见的情况下是必须内嵌字型的,其原因正是目前还没有通用的中文字型与规格。

  在早期 (也许 PDF 格式尚未问世的时候),用做内嵌的中文字型来源是一种名为 HBF的点阵字型,当时有许多程序可以将 HBF 字型转换成 Postscript 可以使用的格式,然而这类的点阵字型分辨率有限,故内嵌在 Postscript 文件中往往不够美观,特别是当我们要做有限度的文字缩放时更是惨不忍睹。后来,由于 TrueType 字型逐渐普及,同时可以处理 TrueType 字型的引擎 -- freetype 函式库的问世,许多基于该函式库的 TrueType 字型转换程序一一开发出来,使得它成为 Postscript 与 PDF 内嵌字型的最重要来源。内嵌了 TrueType 转换字型的文件不但比起过去要美观许多,且由于 TrueType 本身就具有可缩放的特性,故我们可以轻易产生高分辨率的转换字型,使得文件在有限度的缩放下仍不失真。同时由于文鼎公司对自由软件世界的支持,捐赠了两套 TrueType 中文字型供大家自由使用,让我们在中文文件输出问题上得以彻底解决。

  最佳的解决方案仍然是希望以不需内嵌中文字型的方式,其优点除了可以让输出的文件档变小以外, 同时还可以保证在任何尺度上的缩放而不失真。由于内嵌在文件中的字型在很多情况下是将 TrueType 字型转成点阵字型之后,才进行内嵌 (例如在 CJK-LaTeX 所编译的文件中内嵌了由 TrueType 转成 PK 的点阵字)。仅管由转换过来的字型有相当高的分辨率,但再高的分辨率也是有限的,故在做大尺度的缩放时仍然会失真。要做到真正不内嵌中文字型于文件中,有许多工作要做,其中包括:

  1. 要有一套统一的字型名称与规格: 这可能是最令人头疼的部分,因为这里卡到了授权问题。由于 Postscript 与 PDF 文件格式是 Adobe 公司开发的,故其所用的字型名称都会灌上 Adobe 之名,而这些名称是否能在自由软件世界中,以自由软件的游戏规则来运行,将会是个问题,其中尤以 PDF 最为严重。同时,在定这些名称与规格时,我们不能关起门来自己定,必须同时与许多团体谈,可能包括 Adobe 公司、TeX/LaTeX 开发团队、Ghostscript 开发团队、甚至其他与排版、字型相关的计划与 商业公司等。

  2. 要有一个字型的来源: 这一点在现阶段已有初步成果,目前我们已有将 TrueType字型转换成 Postscript 所需的 Type1 字型的工具程序,例如 ttf2pt1 或 chpfb,ttf2pfb 等。除此之外,另外还有一套称为 t1lib 的函式库,可以用来进一步处理 Type1 字型,例如将字缩放、旋转,或将它转换成点阵的格式以用于其它的用途 .... 等等。

  3. 如果我们有了 Type1 的字型,我们还可以进一步地将它合成 Type0 的 CID-Keyed字型,可用于 Postscript 与 PDF 的文件中。

  4. 我们的文件转换引擎: Ghostscript 要能处理多字节编码、并利用这些字型:这一点目前也正积极开发中,例如下一代的 Ghostscript 就有处理多字节编码的能力,除了迎接未来的中文 Type1 字型以外,它还内含了一个可直接使用TrueType 字型的模块,可以做到不需要字型的内嵌,就可以使用 TrueType 字型来显示文件,其原 理是将 TrueType 字型仿真成 Type0 CID-Keyed 字型来用。但这可能会面临可移植性 的问题,万一将此文件拿到其它没有安装此 TrueType字型的系统下就无法读了。因此,它目前也同时在开发直接内嵌 TrueType 字型的技术,做为因应此问题的配套措施。

  中文 Postscript 与 PDF 文件的产生

  ·目前较通用的纯文字文件转 Postscript 格式的程序为由 python 语言所写成的 bg5ps程序,它所产生的 Postscript 文件采内嵌中文字型的方式,而中文字型的来源即为TrueType 字型。

  CJK-LaTeX

  · 是一套功能相当强大的幕后排版系统,它使用类似程序语言的方式,来格式化并编排文件,并配合 Postscript 的输出,可以轻易达到高品质文件的输出要求。特别是它容易处理数学符号的特性,使得它特别适于学术文件、书籍、出版的排版工作。要让 LaTeX 能处理中文,必须在 LaTeX 系统上额外加装一套 CJK-LaTeX 的宏。顾名思议,此宏可以付与 LaTeX 处理中文、日文、韩文等编码系统的能力,而它也渐渐成为 LaTeX 的标准之一。而它最后在产生 Postscript 文件时,是采用内嵌中文字型的方式,其字型来源也是 TrueType。它利用 freetype 函式库的衍生工具 ttf2tfm、ttf2pk 将 TrueType 字型转换成 TFM 与 PK 点阵字型,前者用于前段的排版工作,后者则用于最后的字型内嵌。

  LaTeX 的外衣 -- LyX

  LyX 是一个以 LaTeX 为基底的一个图形化排版系统,让我们不必须记一大堆 LaTeX的排版指令,可以直接可视化地在窗口内编排我们的文件,而最后的排版输出才交由LaTeX 处理。它的中文支持目前正慢慢发展中,包括支持 XIM 协议,使得我们可以用 XIM server 输入法程序直接在它的窗口内打中文。而它的 CJK-LaTeX 指令的部分在经过少许的修正后也能正确地搭配使用。
推荐阅读
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 本文介绍了Python对Excel文件的读取方法,包括模块的安装和使用。通过安装xlrd、xlwt、xlutils、pyExcelerator等模块,可以实现对Excel文件的读取和处理。具体的读取方法包括打开excel文件、抓取所有sheet的名称、定位到指定的表单等。本文提供了两种定位表单的方式,并给出了相应的代码示例。 ... [详细]
  • 本文介绍了在Pygame中使用矩形对表面进行涂色的方法。通过查阅Pygame文档中的blit函数,可以了解到如何将一个表面的特定部分复制到另一个表面的指定位置上。具体的解决方法和参数说明在文中都有详细说明。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 本文介绍了Python异常的捕获、传递与抛出操作,并提供了相关的操作示例。通过异常的捕获和传递,可以有效处理程序中的错误情况。同时,还介绍了如何主动抛出异常。通过本文的学习,读者可以掌握Python中异常处理的基本方法和技巧。 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Python字典推导式及循环列表生成字典方法
    本文介绍了Python中使用字典推导式和循环列表生成字典的方法,包括通过循环列表生成相应的字典,并给出了执行结果。详细讲解了代码实现过程。 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了使用Python根据字典中的值进行排序的方法,并给出了实验结果。通过将字典转化为记录项,可以按照字典中的值进行排序操作。实验结果显示,按照值进行排序后的记录项为[('b', 2), ('a', 3)]。 ... [详细]
  • Python如何调用类里面的方法
    本文介绍了在Python中调用同一个类中的方法需要加上self参数,并且规范写法要求每个函数的第一个参数都为self。同时还介绍了如何调用另一个类中的方法。详细内容请阅读剩余部分。 ... [详细]
author-avatar
mobiledu2502857923
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有