一种字体文件的嵌入方法及装置的制作方法

文档序号:6613861阅读:187来源:国知局
专利名称:一种字体文件的嵌入方法及装置的制作方法
技术领域
本发明属于字体技术领域,特别涉及字体文件的嵌入方法及装置。
背景技术
文字是一份电子文档的主要内容,而任何文字都不能脱离字体而单独存
在,目前大多数电子文档都使用了 TrueType字体。由于中文字符较多,并且 字形复杂,所以中文字体的字体文件都比较大。GB2312-80《信息交换用汉字 编码字符集基本集》共收录了 6763个简体汉字,GBK码收录了 21003个汉字, 而单、双、四字节混合编码的GB18030-2000标准更是收录了 27000个汉字。 与上述字符集对应的汉字字库文件一般都在1謹B以上。为了保证电子文档的 文字所采用的字体在不同的软、硬件环境下显示正确,可以考虑将字体文件嵌 入到电子文档中,这样即使在没有该字体的计算机上也可以正常显示字体。 字体文件中包括glyf表、loca表和Hmtx表。
字形数据存储在glyf表中。众多字形(Glyph )数据的顺序排列。TrueType 字体文件中的字形数据有两种形式,即简单类型字形和复合类型字形。简单 类型字形数据直接通过若干条Bezier曲线描述字形的轮廓;而复合类型字形 则通过若干个简单类型字形和复合类型字形的放缩变换描述字形的轮廓,实际 上是一种对现有字形数据的复用。当字体引擎解析复合字形时,必须找到所有 该复合类型字形所引用的简单类型字形才能输出该字的位图,即对于复合类型 字形在glyf表内的字形数据为其所引用的简单类型字形数据的索引。glyf表 内部顺序存》文了所有的字形数据。
loca表没有表头,其内部记录了字形索引(Glyph Index )到字形(Glyph)
数据偏移量的一对一映射关系。根据TrueType文件4各式规范可知,loca表存 在两种格式,即短格式和长格式。当loca使用短格式时,表内部为一个SHORT 类型(2字节)的数组;当loca使用长格式时,表内部为一个UL0NG类型(4 字节)的数组。字体文件中的head表中的indexToLocFormat字段指明了该字 体文件使用了上述两种格式中的哪一种。
由字形索引(Glyph Index)计算字形数据偏移量(Glyph Offset)的计 算规则是
若head表中的indexToLocFormat值为1,则使用公式A计算字形数据的 偏移量;若indexToLocFormat值为0,则使用公式B计算字形数据的偏移量。 (offsets为loca表内部的2字节或4字节数组) 公式A: GlyphOffset = offsets [Glyphlndex*4] 公式B: GlyphOffset = offsets [Glyphlndex*2] Hmtx表记录了所有字形数据(Glyph)的Metrix信息。 就当前而言,嵌入到电子文档内部的字体文件体积较大,嵌入后电子文档 的体积通常会大幅增加,这是与电子出版物要求的文件小巧,传输便捷的特点 相冲突的。

发明内容
为了解决嵌入到电子文档内部的字体文件体积较大,嵌入后电子文档的体 积通常会大幅增加的问题,本发明实施例提供了一种字体文件的嵌入方法,包 括
在字体文件中获取待嵌入字符的字形数据;
重新分配所获取的字形数据的字形索引的索引号,重新分配的最大索引号 小于未重新分配前最大索引号;
按照重新分配的字形索引号顺序,将字形数据重新记录在glyf表中; 按照重新分配的字形数据的索引号,获取字形数据对应的偏移量;
将重新分配的字形索引的索引号和字形数据对应的偏移量的映射关系,记
录在loca表中;
修改字体文件maxp表的numGlyphes和hhea表的number0f HMetrics数据 域的值,使之等于字形数据的数量; 将字体文件嵌入到电子文档中。
同时本发明实施例还提供一种字体文件的嵌入装置,包括 字形数据获取^^块用于在字体文件中获取待嵌入字符的字形数据; 分配模块用于重新分配所获取的字形数据的字形索引的索引号,重新分
配的最大索引号小于未重新分配前最大索引号;
glyf表修改模块用于按照重新分配的字形索引号顺序,将字形数据重新
记录在glyf表中;
偏移量获取模块用于按照重新分配的字形数据的索引号,获取字形数据 对应的偏移量;
loca表修改模块用于将重新分配的字形索引的索引号和字形数据对应的 偏移量的映射关系,记录在loca表中;
maxp表修改模块用于修改字体文件maxp表的謹Glyphes和hhea表的 numberOfHMetrics数据域的值,使之等于字形数据的数量;
字体文件嵌入模块用于将字体文件嵌入到电子文档中。
由本发明4是供的具体实施方案可以看出,正是由于重新分配字形数据的字 形索引的索引号,按照重新分配的字形索引号顺序,将字形数据重新记录在 glyf表,同样修改loca表,使得新生成的glyf表和loca表不必再携带不必要的 内容,字体文件体积较小。


图1为本发明提供的第一实施例方法流程图2为本发明提供的第一实施例解析复合类型字形数据的方法流程图3为本发明提供的第二实施例装置结构图。
具体实施例方式
本发明提供的第一实施例是一种字体文件的嵌入方法,以将楷体字体文件 待嵌入字符为"中国人民",嵌入到电子文档为例,方法流程如图1所示,包 括
步骤101:根据"中"对应的字体文件在cmap表中的数据,将"中"字的 Unicode字符映射到字体文件中的Glyphlndex (字形索引)1000;
步骤102:根据字体文件现有loca表,得到"中"字对应的字形索引 Glyphlndex的索引号"1000"对应的字形数据在现有glyf表中的字形数据的 GlyphOffset(偏移量)为"10023",同时得到字形索引的索引号为Glyphlndex "1001"对应的字形数据在现有glyf表中的字形数据GlyphOff set (偏移量) "10123";
步骤103:根据字形数据偏移量GlyphOffset "10023"和"10123",在现 有glyf表查找并获取到"中"字的字形数据GlyphData。
步骤101-103仅是以Unicode编码为例,通过Unicode查找并获取字形 (Glyph)数据的过程。
如果提前知道待提取字符的字形索引,还通过如下步骤获取字形(Glyph) 数据执行步骤102和步骤103,利用已知的字形索引获得相应的字形数据。 由上述步骤可知,通过现有技术,有多种方式可获得相应的字形数据。
步骤104:解析字形数据,对欲添加到待嵌入的字体文件中的字形数据, 重新分配字形索引的索引号(Glyph Index)。如在现有技术中"中国人民"中 的"中"对应的字形索引的索引号为"1000","国"对应的字形索引的索引号 为"2000","人"对应的字形索引的索引号为"3000","民"对应的字形索引 的索引号为"4000,,。为"中""国,,"人""民"重新分配字形索引(Glyph Index), 例如分别分配为T、 "2"、 "3"、 "4",或者"4"、 "3"、 "2"、 T,或者"3"、"4"、 'T,、 "2"。重新分配的原则为重新分配后的字形索引的最大索引号, 小于未重新分配时字形索引的最大索引号,在本实施例中,从新分配的最大索 引号小于"民"对应的字形索引的索引号"4000"。作为优选的方案,重新连 续分配字形索引的索引号,作为进一步优选的方案,重新连续分配的字形索引 的索引号从l开始。
步骤105:修改字体文件的glyf表,按照新字形索引的顺序'T,、 "2"、 "3"、 "4"输出"中国人民,,对应的字形数据到glyf表中。
步骤106:按照重新分配的字形数据的字形索引号"1"、 "2"、 "3"、 "4", 获取"中国人民,,对应的字形数据偏移量分别为"0" "100" "330" "450"。
步骤107: ^修改字体文件的loca表,将重新分配的字形索引和字形数据对 应的偏移量的映射关系保存在loca表。重新分配后"中"字对应的字形索引 的索引号为'T,,对应的偏移量为"0",将它们的映射关系保存在loca表中。
步骤108:修改字体文件的maxp表和hhea表中的謡Glyphes和 numberOfHMetrics数据域的值,使之等于被嵌入的字形数据的数量4。
步骤109:生成表目录,记录每个表项的偏移量等信息。
步骤110:将字体文件嵌入到电子文档中。
由于重新分配字形数据的字形索引的索引号,按照重新分配的字形索引号 顺序,将字形数据重新记录在glyf表,同样修改loca表。修改后的glyf表和loca 表只记录了待嵌入字符的字形数据和与之对应的字形索引的相关数据,相对于 现有技术,去除了非待嵌入字符的字形数据和与之对应的字形索引的相关数 据。新生成的glyf表和loca表不必再携带不必要的内容,字体文件体积较小。
为了减少字体文件的体积,进一步还可以删除字体文件的cmap表。
字形数据包括简单字形数据如"中"对应的字形数据和复杂字形数据如 "国"对应的字形数据,对于解析复合字形数据,重新连续分配字形索引的方 法流程图如图2所示,具体过程如下
步骤201:解析该复合类型字形数据,并为该复合类型字形数据(Glyph)
重新分配一个新的字形索引(Glyph Index),同时为#1其引用的字形数据重新 分配一个新的字形索引。如"国"对应的字形数据为复合类型字形数据,其引 用"口"和"玉"对应的字形数据,为"国"对应的字形数据重新分配一个字 形索引为"2",并为"口"和"玉,,对应的字形数据重新分配字形索引分别为 "5" "6"。
步骤202:检查是否存在引用其他复合类型字形数据的情况。 若存在引用复合类型字形数据的情况,重复执行步骤201,解析新出现的
复合类型字形;反之,若引用的字形数据全部是简单字形数据,就跳转至步骤
203终止解析。
在步骤201和步骤202中可能存在多个复合字形同时引用相同字形的情况, 这时只需保存一伤"陂多次引用的字形数据,减少数据的重复。
在解析字形数据时需要区分简单类型和复合类型的字形数据。上面介绍了 对复合类型的字形数据的解析过程,在此过程中解析的结果为被解析的字形数 据本身和被其引用的字形数据分配的新的字形索引。
进一步优化的方案还包括修改字体文件的hmtx表,提取待嵌入字符的 Metrix信息,并按照新分配的字形索引顺序,重新记录每个字形的Metrix信 白
本发明提供的第二实施例是一种字体文件的嵌入装置,其结构如图3所示, 包括
字形数据获取模块301:用于在字体文件中获取待嵌入字符的字形数据;
分配^t块302:用于重新分配所获取的字形数据的字形索引的索引号,重 新分配的最大索引号小于未重新分配前最大索引号;
glyf表修改模块303:用于按照重新分配的字形索引号顺序,将字形数据 重新记录在glyf表中;
偏移量获取模块304:用于按照重新分配的字形数据的索引号,获取字形 数据对应的偏移量;
loca表修改模块305:用于将重新分配的字形索引的索引号和字形数据对 应的偏移量的映射关系,记录在loca表中;
maxp表》务改4莫块306:用于^f奮改字体文件maxp表的n咖Glyphes和hhea 表的numberOfHMetrics数据域的值,使之等于字形数据的数量;
字体文件嵌入^t块307:用于将字体文件嵌入到电子文档中。
明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及 其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1、一种字体文件的嵌入方法,其特征在于,包括在字体文件中获取待嵌入字符的字形数据;重新分配所获取的字形数据的字形索引的索引号,重新分配的最大索引号小于重新分配前最大索引号;按照重新分配的字形索引号顺序,将字形数据重新记录在glyf表中;按照重新分配的字形数据的索引号,获取字形数据对应的偏移量;将重新分配的字形索引的索引号和字形数据对应的偏移量的映射关系,记录在loca表中;修改字体文件maxp表的numGlyphes和hhea表的numberOfHMetrics数据域的值,使之等于字形数据的数量;将字体文件嵌入到电子文档中。
2、 如权利要求1所述的方法,其特征在于,重新分配所获取的字形数据的字形索引的索引号的步骤具体为 重新连续分配待嵌入字符字形数据的字形索引的索引号。
3、 如权利要求2所述的方法,其特征在于,重新连续分配待嵌入字符字 形数据的字形索引的索引号从l开始递增编码。
4、 如权利要求1所述的方法,其特征在于,所述将字体文件嵌入到电子 文档中的步骤前还包括删除字体文件cmap表。
5、 如权利要求1所述的方法,其特征在于,所述将字体文件嵌入到电子 文档中的步骤前还包括修改字体文件hmtx表,提取待嵌入字符字形数据的Metrix信息,并按照 新分配的字形索引顺序,重新记录提取的Metrix信息到hmtx表。
6、 如权利要求1所述的方法,其特征在于,所述字形数据包括简单字形数据和/或复合字形数据。
7、 如权利要求6所述的方法,其特征在于,若字形数据为简单字形数据, 直接为该简单类型字形数据重新分配新的字形索引。
8、 如权利要求6所述的方法,其特征在于,若字形数据为复合字形数据,首先为复合类型字形数据重新分配新的字形索引,再为被其引用的字形数据重 新分配新的字形索引。
9、 如权利要求8所述的方法,其特征在于,还包括 检查是否存在引用其他复合类型字形数据的步骤;若存在引用复合类型字形数据,重复复合类型字形数据字形索引重新分配 的步骤,若引用的字形数据全部是简单字形数据,直接为该简单类型字形数据 重新分配新的字形索引。
10、 一种字体文件的嵌入装置,其特征在于,包括 字形数据获取模块用于在字体文件中获取待嵌入字符的字形数据; 分配模块用于重新分配所获取的字形数据的字形索引的索引号,重新分配的最大索引号小于未重新分配前最大索引号;glyf表修改模块按照重新分配的字形索引号顺序,将字形数据重新记录 在glyf表中;偏移量获取^f莫块用于按照重新分配的字形数据的索引号,获取字形数据 对应的偏移量;loca表修改模块用于将重新分配的字形索引的索引号和字形数据对应的 偏移量的映射关系,记录在loca表中;maxp表修改模块用于修改字体文件maxp表的numGlyphes和hhea表的 numberOfHMetrics数据域的值,使之等于字形数据的数量;字体文件嵌入it块用于将字体文件嵌入到电子文档中。
全文摘要
本发明公开了一种字体文件的嵌入方法及装置,为了解决嵌入到电子文档内部的字体文件体积较大,嵌入后电子文档的体积通常会大幅增加的问题,本发明公开的方法包括获取待嵌入字符的字形数据;重新分配字形数据的字形索引的索引号,重新分配的最大索引号小于重新分配前最大索引号;按照索引号顺序,将字形数据重新记录在glyf表中;获取字形数据对应的偏移量;索引号和偏移量的映射关系,重新记录在loca表中;修改字体文件maxp表的numGlyphes和hhea表的numberOfHMetrics数据域的值,使之等于字形数据的数量;将字体文件嵌入到电子文档中。由于重新分配索引号,因此glyf表和loca表不必携带非必要内容,字体文件的体积较小。
文档编号G06F17/30GK101187939SQ20071017793
公开日2008年5月28日 申请日期2007年11月22日 优先权日2007年11月22日
发明者何震生, 源 刘, 毅 王 申请人:北大方正集团有限公司;北京方正阿帕比技术有限公司;北京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1