一种字库的网络分发方法及系统的制作方法

文档序号:7926898阅读:178来源:国知局

专利名称::一种字库的网络分发方法及系统的制作方法
技术领域
:本发明属于字符信息处理
技术领域
,具体涉及一种字库的网络分发方法及系统,适用于需要通过网络共享字库的场合。
背景技术
:字库是现代操作系统的重要组成部分之一,计算机通过它完成字体的呈现,如显示,打印等。现有主流的字库组织方式是按照字体风格的不同进行,甚至同一风格不同粗细的字体也需要存储在不同的字库中。例如Windows中使用的方正姚体,微软雅黑等,其中微软雅黑又有不同的粗细之分,分别存储在不同的文件中。而随着字符集的扩充,尤其是为了支持东亚语种,所需的字符数不断增加,导致字库的数据量不断增加。造成字库在网络环境下分发的不便。现有的字库分发方法一般采用直接下载整个字库的方式,这种方式存在数据量大,响应速度慢,冗余数据量大等不足之处。
发明内容针对现有技术中存在的缺陷,本发明的目的是提供一种字库的网络分发方法及系统,该方法及系统能够减轻网络负载、提高响应速度和降低数据的冗余量。为了实现上述目的,本发明釆用的技术方案是,一种字库的网络分发方法,包括以下步骤(1)发送端将字库中的数据划分为公有数据部分和字形专属数据部分,其中,将字库中具备全局数据性质并能够多次使用的数据划分为公有数据部分,将字库中与字形相关的数据划分为字形专属数据部分;(2)发送端动态提取公有数据部分中的公有数据、字形专属数据部分中与所需字符相关的字形专属数据,并在提取数据的过程中对被提取的数据进行打包处理,生成数据包;(3)发送端向接收端分发步骤(2)中生成的数据包,接收端对收到的数据包进行解包处理后,提取数据包中的数据。如上所述的一种字库的网络分发方法,所述的公有数据只在首次提取和分发字形专属数据部分中的数据时被提取和分发一次。如上所述的一种字库的网络分发方法,步骤(2)中提取与所需字符相关的字形专属数据时,如果字形存在依附字形,则将与依附字形相关的数据一并提取。如上所述的一种字库的网络分发方法,对步骤(2)中打包过的字符进行记录,下次提取字符相关的字形专属数据时,首先在记录中查找是否存在相同的字符曾被提取并分发过,如果存在,则不再对该字符进行重复处理。如上所述的一种字库的网络分发方法,步骤(2)中所述的数据包由数据头、索引表和实体二进制数据三部分构成。如上所述的一种字库的网络分发方法,所述的数据头由传入数据总个数、当前数据类型的序号、传入数据作为整体的类型、当前数据头的版本和预留位组成;所述的索引表由若干个索引构成,每个索引由当前传入数据的类型、标识编码、与此标识编码有关的实体二进制数据的存储位置以及实体二进制数据的长度构成。如上所述的一种字库的网络分发方法,所述的字库为TrueType字库;所述的公有数据部分包括TrueType字库的文件头、描述表目录以及除字形轮廓数据表之外的其他描述表;所述的字形专属数据部分包括字形轮廓数据表。如上所述的一种字库的网络分发方法,步骤(2)中提取公有数据的过程包括以下步骤l)读取文件头,获取字库描述表的数目;2)根据描述表的数目遍历描述表目录,获取一个描述表的标识以及该描述表的偏移量和数据的大小;3)根据描述表的标识判断该描述表中的数据是否为公有数据,如果是,则根据该描述表的偏移量和数据大小,找到并读取指定大小的数据,否则遍历下一个描述表,重复步骤2)和步骤3),直到遍历完所有的描述表为止。如上所述的一种字库的网络分发方法,步骤(2)中所述的打包处理过程包括以下步骤1)传入打包数据和相应的参数,所述的参数包含UnPackType类型和数据索引,当UnPackType类型为FILLGLYF时,数据索引为与字符对应的字形索引;当UnPackType类型为FONTHEADER时,数据索引为0;当UnPackType类型为FONTFRAMEWORK时,数据索引为描述表对应的标识,其中FONTHEADER代表传入的数据为文件头,FONTFRAMEWORK代表传入的数据为公有数据部分中的描述表,FILLGLYF则代表传入的数据为字形专属数据部分中与具体字符对应的字形数据;2)根据步骤1)中传入的参数确定索引参数,所述的索引参数的结构为{UnPackType,数据索引,dwOffset,传入数据长度),其中dwOffset为当前索引的实体二进制数据的偏移量;3)将打包数据追加到索引数组和数据数组;4)更新偏移量;5)继续传入打包数据,直到完成;6)合并索引数组和数据数组,加上数据头后组合成一个数据包。如上所述的一种字库的网络分发方法,步骤(3)中所述的解包处理过程为首先根据数据头中的传入数据总个数,确定索引数量,然后遍历所有的索引,根据索引中数据的偏移量和数据的大小,从实体二进制数据中提取出对应的数据。一种字库的网络分发系统,包括发送端和接收端,其中,所述的发送端中设有以下模块数据划分模块用于把字库中的数据划分为公有数据部分和字形专属数据部分,其中,所述的公有数据是指字库中具备全局数据性质并能够多次使用的数据,所述的字形专属数据是指字库中与字形相关的数据;数据提取模块用于提取数据划分模块划分的公有数据和字形专属数据;打包模块用于将数据提取模块提取的数据进行打包,生成数据包;数据分发模块用于分发打包模块生成的数据包;所述的接收端中设有用于解析打包模块生成的数据包的解包模块。如上所述的一种字库的网络分发系统,所述的数据提取模块中还设有公有数据提取子模块和字形专属数据提取子模块,分别用于提取公有数据和字形专属数据。本发明的效果在于采用本发明所述的方法及系统,将现有字库中的数据分割为字库公有数据部分和字形专属部分,在首次网络分发时,分发字库公有数据部分和与所需字符相应的字形专属部分数据,接下来在每次网络分发时,只分发与当前使用字符相关的字形专属数据。通过这种方式,减轻了网络负载,提高了响应速度,降低了数据的冗余量,达到了按需分发的目的。图1为本发明所述的系统结构图2为本发明所述的方法流程图3为本发明具体实施方式中数据类别划分示意图4为本发明具体实施方式中提取公有数据流程图5为本发明具体实施方式中存在依附关系的字形示例图6为本发明具体实施方式中提取依附关系字形数据流程图7为本发明具体实施方式中数据打包流程图8为本发明具体实施方式中数据解包流程图。具体实施例方式下面结合实施例和附图对本发明所述的方法及系统进4亍详细地描述。如图l所示,一种字库的网络分发系统,包括发送端和接收端,其中,所述的发送端中设有以下模块数据划分模块11,用于把字库中的数据划分为公有数据部分和字形专属数据部分,其中,所述的公有数据是指字库中具备全局数据性质并能够多次使用的数据,所述的字形专属数据是指字库中与字形相关的数据;数据提取模块12,用于提取数据划分模块11划分的公有数据和字形专属数据;本实施例中,数据提取模块12中设有公有数据提取子模块121和字形专属数据提取子模块122,分别用于提取公有数据和字形专属数据;打包模块13,用于将数据提取模块12提取的数据进行打包,生成数据包;数据分发模块14,用于分发打包模块13生成的数据包;所述的接收端中设有用于解析打包模块生成的数据包的解包模块15。如图2所示,一种字库的网络分发方法,包括以下步骤。(1)数据划分模块11将字库中的数据划分为公有数据部分和字形专属数据部分。将字库中具备全局数据性质并能够多次使用的数据划分为公有数据部分,将字库中的与字形相关的数据划分为字形专属数据部分。如图3所示,以TrueType字库(以下简称TTF)为例一个标准的TTF文件由2个部分组成文件头和一系列的描述表。其中,文件头包括OffsetTable(偏移表)和TabletDirectory(描述表目录),偏移表包括文件版本号、描述表数目、描述表快速查找范围、入口选择、范围调整等信息;偏移表后紧跟描述表目录,包括描述表名称、描述表内容的校验和、描述表的偏移地址及描述表数据大小等信息;最后是各个具体的文件描述表,包括字符编码的查找方法、字形轮廓数据的描述方法等信息。常用的TTF文件描述表共有19个,其中10个是必备的,其它9个是可选的。必备表主要包括字符编码映射表cmap、字形数据定位表loca、字形轮廓数据表glyf等。其中,glyf表是TTF文件的主体部分,用于存放所有的字形轮廓描述信息,包括描述字形轮廓的数据信息和修正字形轮廓的指令信息两部分。读取TTF文件中字形数据时,首先根据文件头得到描述表的个数,然后遍历描述表目录,提取对应描述表数据的偏移量和数据大小,最后根据偏移量和数据大小找到并读取数据。TTF文件的偏移表和描述表目录的结构如下表所示,描述表的具体结构可以参考MicrosoftTypography中的相关文档说明。<table>tableseeoriginaldocumentpage10</column></row><table>由上述TTF文件的组织方式可知,TTF的文件头(图3中的公有数据部分1)以及除字形轮廓数据表之外的其他描述表具备全局数据性质并能够多次使用的数据(图3中的公有数据部分2),因此将其划分为公有数据部分;而字形轮廓数据表是与字形相关的数据,因此将其划分为字形专属数据部分。(2)公有数据提取子模块121提取公有数据部分中的公有数据,字形专属数据提取子模块122提取字形专属数据部分中与所需字符相关的字形专属数据,并在提取数据的过程中打包模块13对被提取的数据进行打包处理,生成数据包。对于公有数据部分中的公有数据,在字库的网络应用时,只需提取和分发一次。因为根据上述划分公有数据部分的规则,该部分数据是具备全局数据性质并能够多次使用的数据,它不会因为提取不同的字形专属数据而产生不同,所以只需在首次提取和分发字形专属数据部分中的数据时被提取并分发,当下一次提取和分发字形专属数据部分中的数据时,则无需再次提取并分发公有数据部分。如图4所示,以提取TTF中的公有数据为例来说明本发明提取公有数据的过程,主要包括以下步骤1)读取文件头,获取描述表的数目,并将文件头传入打包模块13;2)根据描述表的数目遍历描述表目录,获取一个描述表的标识tag以及该描述表的偏移量和数据的大小;3)根据描述表的标识tag判断该描述表中的数据是否为公有数据,如果是,则根据该描述表的偏移量和数据的大小,找到并读取指定大小的数据,并将其传入打包模块13,否则遍历下一个描述表,重复步骤2)和步骤3),直到遍历完所有的描述表为止。对于字形专属数据部分中的数据,可能存在字形之间的依附关系,即字形是由其他字形组合而成的情况。因此,该部分数据在提取时,必须考虑字形是否存在依附关系以及如何提取与依附字形相关的数据问题。以TTF为例,根据标准TTF的内在机制,当提取一个字符对应的字形数据时,首先根据字符的编码在字符编码映射表cmap中找到其对应的字形索引,然后在字形数据定位表loca中根据索引找到字形数据的起始位置,并同时确定字形数据的大小。然后就可以提取出字符对应字形的数据。对于字形是简单回路的情况(即非组合字形),可以直接将其传入打包模块。对于字形是由其他字形组合而成的情况,即存在字形依附关系的字形,需要同时提取出其依附字形的数据。如图5所示,编码为0x517B的字形存在依附字形,依次为glyph08597,glyph06297,glyph07695,glyph07937,glyph08064,glyph08159。如图6所示,处理依附字形的过程为首先将提取的字形数据传入打包模块13,然后遍历该字形数据,发现依附字形后,提取出依附字形的索引,并按照依附字形的索引提取出对应的字形数据,将其传入打包模块13,直至提取完所有当前字形的全部依附字形数据为止。以图5为例,首先提取索引为8597的字形数据,传入打包模块13后,再提取索引为6297的字形数据并传入打包模块13,直至处理完索引为8159的字形数据为止。另外,在提取字形专属数据时,可能存在当前使用的字符和以前已经使用过的字符部分重复的问题,即与该字符对应的字形数据以前已经分发过。为了提高效率,对于这个问题,可以对已经分发过的字符采用记录的方式,防止被处理多次。具体方式可以通过记录字符编码的方式来完成。以图5为例,字形索引分别为8597、6297、7695、7937、8064、8159的字形,在处理编码为0x517B的字形时已经进行过打包,则将其记录在以字体名为文件名的文件中,每行通过文本方式记录一个字形的索引。编码为0x517B的字形经过处理后,该文件中就会多出如下几行的文本859762977695793780648159在接下来的处理中,首先根据字形编码通过cmap表映射获得的字形索引,匹配该文件中的文本,如果匹配成功,则直接跳过,否则继续处理。例如在处理编码为0x6205的字形时,通过cmap映射得到其字形索引为6297,从上述的文件中发现索引为6297的字形出现过,则不再处理,直接跳过即可。对于依附字形,同样采用此机制防止字形数据的重复处理。为了便于数据的分发,利用打包模块13在提取数据的过程中对被提取的数据进行打包处理,生成数据包后再进行网络分发。打包数据的目的是为了将提取出来的数据,可能包含公有数据和不定个数的字形专属数据的集合,组合成一个数据包,方便数据的统一分发。为此,需要结合如下的数据结构。首先是一个数据头(名称HEAD):由传入数据总个数usNumOfCode,当前数据类型的序号usCurNum,传入数据作为整体来看的类型usType,当前数据头的片反本usVersion和预留位us0ther组成,其结构^口下。typedefstruct_tagHEADUSHORTusNumOfCode;USHORTusCurNum;USHORTusType;USHORTusVersion;USHORTusOther;)HEAD,化PHEAD;然后是索引表,其中每个元素为一个DIRECT结构由当前传入数据的类型utDirType、标识编码dwCode、与此标识编码有关的实体二进制数据的存储位置dwOffset(该位置的起始位置为实体二进制数据的存储起始位置)以及实体二进制数据的长度usLenOfBin组成,其结构如下。typedefstruct—tagDIRECTUnPackTypeutDirType;.DWORDdwCode;DWORDdwOffsetUSHORTusLenOfBin;}DIRECT,*LPDIRECT;其中UnPackType为如下所示的枚举类型。enumUnPackTypeFONTHEADER=0x01,FONTFRAMEWORK=0x100,FILLGLYF-0x1000FONTHEADER代表TTF中的文件头,包括偏移表和描述表目录两部分。FONTFRAMEWORK代表公有数据部分中的各个描述表,FILLGLYF则代表与某个具体字符对应的字形数据。最后是所有实体二进制数据。上述数据头和索引表是为辅助实体二进制数据的数据结构。如图7所示,打包的过程主要包括以下步骤。1)传入打包数据和相应的参数。所述的参数包含UnPackType类型和数据索引。当UnPackType类型为FILLGLYF时,数据索引为与字符对应的字形索引;当UnPackType类型为FONTHEADER时,数据索引为0;当UnPackType类型为FONTFRAMEWORK时,数据索引为描述表对应的标识。2)根据传入的参数构造出索引参数。索引参数的结构为{UnPackType,数据索引,dwOffset,传入数据长度},其中dwOffset为当前索引的实体二进制数据的偏移量。例如,传入字形索引为4000的字形专属数据,其长度为102个字节,则根据传入的参数构造出的索引参数如下{FILLGLYF,4000,dwOffset,102},当新构造一个数据包时,当前索引的实体二进制数据的偏移量置零,每次传入新的数据,无论公有数据还是字形专属数据,当前索引的实体二进制数据的偏移量在构造索引参数结束后,累加传入数据的长度。此例中,如果是首次构造数据包,则上述的dwOffset为0,在构造完当前索引参数后,更新为0+102,即102。即下一次构造索引单元时,dwOffset为102。如果是第一次操作,还需要重置索引数组和数据数组。在构造完当前的索引参数后,将当前的索引参数追加到索引数组中,并且将对应的数据102个字节,追加到数据数组中。然后更新偏移量为102。其中数据数组为一个二进制数组,索引数组为索引结构的数组。接下来,如果仍需要传入数据,则重复上述流程。例如接下来需要传入TTF的文件头数据,则才艮据传入参数构造出的索引参数如下{FONTHEADER,0,102,60},其中102根据上述的更新方式获得,FONTHEADER代表当前索引对应的数据为文件头,此时第二项不用填写,默认为0,60代表当前数据的大小为60字节。接下来的操作也是追加数据和更新偏移量。如果还有一个描述表的数据需要继续传入,则继续这一个流程。以传入cmap表中的数据为例,传入的参数对应的索引参数如下{FONTFRAMEWORK,cmap表对应的标识,162,29482},其中,FONTFRAMEWORK代表该索引对应的是TTF描述表类的数据,162为其对应数据的偏移量,29482为数据的大小。cmap表对应的标识可以通过MAKE_TABLE_TAG('c、'm、'a、'p')函数获得,因此在传入相应的参数时只需传入表的名称即可。MAKE_TABLE_TAG函数的定义如下#defineMAKE—TABLE—TAG(—xl(((ULONG)-xl<<24)I((UL0NG)_x2<<16)I((UL0NG)一x3《8)1(FT—ULong)_x4接下来的操作同上。3)当所有数据传入完毕后,对数据进行整合。现有的数据分散在两个数组中,需要将其合并,并且加一个数据头,来组合成一个数据包。在此例中,构造出如下的l《据头{3,2,FONTHEADER+F0NTFRAMEW0RK+FILLGLYF,1,0},其中3代表传入数据的总个数,也就是说,共有三个需要索引的数据,当前操作的为第2个(从零开始计算),数据的类型为三个类型的混合,版本号为1,保留项为0。数据打包完成后,数据分发模块14便可以将数据包分发给接收端。(3)数据分发模块14向接收端分发打包模块13生成的数据包,接收端利用解包模块15对收到的数据包进行解包处理后,提取数据包中的数据。经过网络分发之后,数据需要进行解包才能够使用。解包的过程如图8所示。首先根据数据头中的传入数据总个数,确定可以使用的索引数量。其中数据的类型标识可以用于快速确定当前数据包中是否还有所需要的数据。接下来,遍历所有的索引,根据索引中数据的偏移量和数据的大小,从实体二进制数据中提取出对应的数据,其中实体数据的起始位置为数据头的大小和所有索引的大小的总和。然后结合索引中提供的类型变量和标识编码,共同确定提取出的数据如何使用。需要说明的是本发明所述的方法及系统并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。权利要求1.一种字库的网络分发方法,包括以下步骤(1)发送端将字库中的数据划分为公有数据部分和字形专属数据部分,其中,将字库中具备全局数据性质并能够多次使用的数据划分为公有数据部分,将字库中与字形相关的数据划分为字形专属数据部分;(2)发送端动态提取公有数据部分中的公有数据、字形专属数据部分中与所需字符相关的字形专属数据,并在提取数据的过程中对被提取的数据进行打包处理,生成数据包;(3)发送端向接收端分发步骤(2)中生成的数据包,接收端对收到的数据包进行解包处理后,提取数据包中的数据。2.如权利要求1所述的一种字库的网络分发方法,其特征在于所述的公有数据只在首次提取和分发字形专属数据部分中的数据时被提取和分发一次。3.如权利要求1所述的一种字库的网络分发方法,其特征在于步骤(2)中提取与所需字符相关的字形专属数据时,如果字形存在依附字形,则将与依附字形相关的数据一并提取。4.如权利要求1所述的一种字库的网络分发方法,其特征在于对步骤(2)中打包过的字符进行记录,下次提取字符相关的字形专属数据时,首先在记录中查找是否存在相同的字符曾被提取并分发过,如果存在,则不再对该字符进行重复处理。5.如权利要求1所述的一种字库的网络分发方法,其特征在于步骤(2)中所述的数据包由数据头、索引表和实体二进制数据三部分构成。6.如权利要求5所述的一种字库的网络分发方法,其特征在于所述的数据头由传入数据总个数、当前数据类型的序号、传入数据作为整体的类型、当前数据头的版本和预留位组成;所述的索引表由若干个索引构成,每个索引由当前传入数据的类型、标识编码、与此标识编码有关的实体二进制数据的存储位置以及实体二进制数据的长度构成。7.如权利要求1至6之一所述的一种字库的网络分发方法,其特征在于所述的字库为TrueType字库;所述的公有数据部分包括TrueType字库的文件头以及除字形轮廓数据表之外的其他描述表;所述的字形专属数据部分包括字形轮廓数据表。8.如权利要求7所述的一种字库的网络分发方法,其特征在于步骤(2)中提取公有数据的过程包括以下步骤1)读取文件头,获取字库描述表的数目;2)根据描述表的数目遍历描述表目录,获取一个描述表的标识以及该描述表的偏移量和数据的大小;3)根据描述表的标识判断该描述表中的数据是否为公有数据,如果是,则根据该描述表的偏移量和数据大小,找到并读取指定大小的数据,否则遍历下一个描述表,重复步骤2)和步骤3),直到遍历完所有的描述表为止。9.如权利要求7所述的一种字库的网络分发方法,其特征在于步骤(2)中所述的打包处理过程包括以下步骤1)传入打包数据和相应的参数,所述的参数包含UnPackType类型和数据索引,当UnPackType类型为FILLGLYF时,数据索引为与字符对应的字形索引;当UnPackType类型为FONTHEADER时,数据索引为0;当UnPackType类型为FONTFRAMEWORK时,数据索引为字库描述表对应的标识,其中FONTHEADER代表传入的数据为文件头,FONTFRAMEWORK代表传入的数据为公有数据部分中的描述表,FILLGLYF则代表传入的数据为字形专属数据部分中与具体字符对应的字形数据;2)根据步骤1)中传入的参数确定索引参数,所述的索引参数的结构为{UnPackType,数据索引,dwOffset,传入数据长度},其中dwOffset为当前索引的实体二进制数据的偏移量;3)将打包数据追加到索引数组和数据数组;4)更新dwOffset;5)继续传入打包数据,直到完成;6)合并索引数组和数据数组,加上数据头后组合成一个数据包。10.如权利要求9所述的一种字库的网络分发方法,其特征在于,步骤(3)中所述的解包处理过程为首先根据数据头中的传入数据总个数,确定索引数量,然后遍历所有的索引,根据索引中数据的偏移量和数据的大小,从实体二进制数据中提取出对应的数据。11.一种字库的网络分发系统,包括发送端和接收端,其中,所述的发送端中设有以下模块数据划分模块用于把字库中的数据划分为公有数据部分和字形专属数据部分,其中,所述的公有数据是指字库中具备全局数据性质并能够多次使用的数据,所述的字形专属数据是指字库中与字形相关的数据;数据提取模块用于提取数据划分模块划分的公有数据和字形专属数据;打包模块用于将数据提取模块提取的数据进行打包,生成数据包;数据分发模块用于分发打包模块生成的数据包;所述的接收端中设有用于解析打包模块生成的数据包的解包模块。12.如权利要求11所述的一种字库的网络分发系统,其特征在于所述的数据提取模块中还设有公有数据提取子模块和字形专属数据提取子模块,分别用于提取公有数据和字形专属数据。全文摘要本发明公开了一种字库的网络分发方法及系统,属于字符信息处理
技术领域
。现有的字库分发方法中,采用全字库分发方式。这种方式存在数据量大,响应速度慢,冗余数据量大等不足之处。本发明所述的方法及系统在现有字库格式的基础上,将字库中的数据划分为公有数据部分和字形专属数据部分两类数据;然后动态提取公有数据部分中的公有数据、字形专属数据部分中与所需字形相关的专属数据,并在提取数据的过程中对被提取的数据进行打包处理,生成数据包;最后向接收端分发数据包,接收端对收到的数据包进行解包处理后,提取数据包中的数据。采用本发明所述的方法及系统分发字库时,降低了网络负载和数据冗余量,提高了响应速度,实现了按需分发的目的。文档编号H04L12/54GK101369953SQ200810222439公开日2009年2月18日申请日期2008年9月17日优先权日2008年9月17日发明者昉刘,唐英敏,张国荣,明李申请人:北大方正集团有限公司;北京大学;北京北大方正电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1