一种基于文档中内嵌字体的优化方法及装置
技术领域
本发明涉及文档处理领域,具体涉及一种基于文档中内嵌字体的优化方法及装置。
背景技术
在文档中,为了保证在不同平台上显示的一致性,字体内嵌是一种被广泛采用的技术手段。具体来说,将部分字体数据从原始字体中抽取出来,整合在一起形成一个新的字体文件,这个过程就叫字体内嵌,所得到新的字体就是内嵌字体。一般来说,内嵌字体只会包含该文档中文字显示所需要的那部分字体数据,使得数据量尽可能的小。内嵌字体可以认为是一组不同字型的集合,此外还会包含从字符编码或者字型编号到相应字型的映射关系。用户可以通过字符编码或者字型编号(索引号)获取对应的字型进行显示。但是有的内嵌字体甚至都不含有字符编码到字型的映射关系。
通过字体内嵌的方式,可以避免当前操作系统对显示文本不支持的情况,可以还原最原始的排版效果,解决不同平台上的统一效果的问题。但是,因为不同的加工方式,导致文档中内嵌字体存在重复字形,且编码方式不规范或者采用自定义的编码。采用内嵌字体的方式,文档本身的数据量会较大,当出现重复字形时,会重复一次编码,加大了文档数据量。在PC机上查看时影响不大,但是文件需要在移动设备显示时,文档太大会导致下载速度慢,占用空间大,文档打开慢,如何减小文档的数据量,提高显示速度成为亟待解决的问题之一。
发明内容
因此,本发明要解决的技术问题在于克服现有技术中的具有内嵌字体的文档数据量大的缺陷。
本发明提供一种基于文档中内嵌字体的优化方法,包括如下步骤:
获取文档中内嵌字体的字体信息,所述字体信息包括字体名称及其对应的字体文件;
获取所述字体文件中的字形及其属性信息;
根据所述字形及其属性信息,将字体名称相同的字体文件进行合并。
优选地,将字体名称相同的字体文件进行合并的步骤,包括:
建立合并字体库;
获取待合并字体文件;
判断所述合并字体库是否为空,若所述合并字体库为空,则将所述待合并字体文件中的字形及其属性信息加入所述合并字体库中;
如果所述合并字体库不为空,获取所述待合并字体文件中的一个字形及其属性信息;
将该字形及其属性信息依次与所述合并字体库中的每个字形及其属性信息进行比较,若不同则将该字形及其属性信息增加到所述合并字体库中,若相同则继续获取待合并字体文件中的下一个字形及其属性信息,循环本步骤,遍历所述待合并字体文件中的所有字形及其属性信息。
优选地,所述将该字形及其属性信息依次与所述合并字体库中的每个字形及其属性信息进行比较的过程,包括:
首先将该字形及其属性信息与所述合并字体库中的每个字形及其属性信息进行模糊比对,如果模糊比对不一致,则判断为不同,若模糊比对一致,则进行精确比较,若精确比较相同,则判断为相同,否则为不同。
优选地,所述模糊比对根据指纹数据来判断,所述指纹数据为根据字形的宽、高、轮廓线集合个数、轮廓线矩形框数据、所有轮廓集合中的点的位置信息中的一个或几个数据获得。
优选地,所述精确比较为将各个字形的属性一一比对。
优选地,所述属性信息包括字形的UNICODE码、索引位置、宽、高、轮廓线、轮廓线集合个数、轮廓线矩形框数据、所有轮廓集合中的点的位置信息中的一种或几种。
本发明还提供一种基于文档中内嵌字体的优化装置,包括:
字体收集单元,获取文档中内嵌字体的字体信息,所述字体信息包括字体名称及其对应的字体文件;
字体解析单元,获取所述字体文件中的字形及其属性信息;
字体合并单元,根据所述字形及其属性信息,将字体名称相同的字体文件进行合并。
优选地,字体合并单元包括:
合并字体库建立子单元,建立合并字体库;
待合并字体文件获取子单元,获取待合并字体文件;
合并子单元,判断所述合并字体库是否为空,若所述合并字体库为空,则将所述待合并字体文件中的字形及其属性信息加入所述合并字体库中;
信息获取子单元,如果所述合并字体库不为空,获取所述待合并字体文件中的一个字形及其属性信息;
循环处理子单元,将该字形及其属性信息依次与所述合并字体库中的每个字形及其属性信息进行比较,若不同则将该字形及其属性信息增加到所述合并字体库中,若相同则继续获取待合并字体文件中的下一个字形及其属性信息,循环本步骤,遍历所述待合并字体文件中的所有字形及其属性信息。
优选地,循环处理子单元包括比对子单元,首先将该字形及其属性信息与所述合并字体库中的每个字形及其属性信息进行模糊比对,如果模糊比对不一致,则判断为不同,若模糊比对一致,则进行精确比较,若精确比较相同,则判断为相同,否则为不同。
优选地,所述模糊比对根据指纹数据来判断,所述指纹数据为根据字形的宽、高、轮廓线集合个数、轮廓线矩形框数据、所有轮廓集合中的点的位置信息中的一个或几个数据获得
本发明技术方案,具有如下优点:
1.本发明提供的基于文档中内嵌字体的优化方法及装置,该方法为:首先,获取文档中内嵌字体的字体信息,所述字体信息包括字体名称及其对应的字体文件,然后获取所述字体文件中的字形及其属性信息;之后,根据所述字形及其属性信息,将字体名称相同的字体文件进行合并。该方案中,通过收集同名字体的方式,通过字形比较,完成重复字形的删除以及字体的合并,消减字体中的重复字形,大大减少了字体数据及存储大小,提高了文档显示时的加载速度。
2.本发明提供的基于文档中内嵌字体的优化方法及装置,将字体名称相同的字体文件进行合并时,根据字体文件中的字形及其属性信息是否相同进行合并,将相同的字形删除,通过模糊比对和精确比对相结合的方式,提高处理速度,减少运算量。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例1中基于文档中内嵌字体的优化方法的一个具体示例的流程图;
图2为本发明实施例1中将字体名称相同的字体文件进行合并处理的流程图;
图3为本发明实施例1中模糊比较的示意图;
图4为本发明实施例2中的字体合并的流程图;
图5为本发明实施例3中基于文档中内嵌字体的优化装置的一个具体示例的结构框图。
具体实施方式
下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
此外,下面所描述的本发明不同实施方式中所涉及的技术特征只要彼此之间未构成冲突就可以相互结合。
实施例1
本实施例中提供一种基于文档中内嵌字体的优化方法,用于对具有内嵌字体的版式文档进行处理,流程图如图1所示,包括以下步骤:
S1、获取文档中内嵌字体的字体信息,所述字体信息包括字体名称及其对应的字体文件。
该步骤中,导入含有内嵌字体的文档,遍历所有页面,提取文档中的各页面所有的内嵌字提的字体信息,此处字体信息包括字体名称及其对应的字体文件,如“宋体”,对应的字体文件为文件1,其中存储有宋体字(“你”、“好”、“我”、“们”)。
对内嵌字体表字体名称分别组合成多个待合并字体集合,每个字体集合中可能包括一个或多个具有相同字体名称但不同字形的内嵌字体数据。可以根据字体名称将具有相同名称的字体文件合并为字体集合,如还存在字体名称为“宋体”的文件2,文件2中具有{“大”、“家”、“你”、“好”},此处将名称相同的文件1和2合并为一个集合,其中包括字体名称相同的多个字体文件,如集合“宋体”包括{(“你”、“好”、“我”、“们”)、(“你”、“好”、“我”、“们”)},此处的集合“宋体”为一个待合并的字体集合。
S2、获取所述字体文件中的字形及其属性信息。所述属性信息包括字形的UNICODE码、索引位置、宽、高、轮廓线、轮廓线集合个数、轮廓线矩形框数据、所有轮廓集合中的点的位置信息中的一种或几种。
通过解析每个字体文件,可以获取字体文件中的字形集合每个字形的详细属性信息集合,属性包括字形的UNICODE码、索引位置、宽、高、轮廓线、hint数据等可用于精准比对,并根据字形的宽、高、轮廓线集合个数、轮廓线矩形框数据、所有轮廓线集合中的点的位置信息计算处每一个字形的指纹数据,用于字形模糊比对。
S3、根据所述字形及其属性信息,将字体名称相同的字体文件进行合并。
该步骤中,选择一个待合并字体集合进行合并处理,该过程如图2所示,包括:
S31:建立合并字体库,该合并字体库用于存储合并后的所有的字形及其属性信息。
S32:获取待合并字体文件,待合并的字体文件为待合并字体集合中的一个文件。
S33:判断所述合并字体库是否为空,若所述合并字体库为空,则执行S34。如果所述合并字体库不为空,则执行S35。
S34:所述合并字体库为空时,将所述待合并字体文件中的字形及其属性信息加入所述合并字体库中。此时,合并字体库中还是空的,将字形及其属性信息存入即可,不存在重复的信息。
S35:所述合并字体库不为空时,获取所述待合并字体文件中的一个字形及其属性信息,进入S36。
S36:将该字形及其属性信息依次与所述合并字体库中的每个字形及其属性信息进行比较,若不同则将该字形及其属性信息增加到所述合并字体库中,若相同则继续获取待合并字体文件中的下一个字形及其属性信息,循环本步骤,遍历所述待合并字体文件中的所有字形及其属性信息。
在该步骤S36中,将该字形及其属性信息依次与所述合并字体库中的每个字形及其属性信息进行比较的过程,包括:首先将该字形及其属性信息与所述合并字体库中的每个字形及其属性信息进行模糊比对,如图3所示,如果模糊比对不一致,则判断为不同,若模糊比对一致,则进行精确比较,若精确比较相同,则判断为相同,否则为不同。
本实施例中,所述模糊比对根据指纹数据来判断,所述指纹数据为根据字形的宽、高、轮廓线集合个数、轮廓线矩形框数据、所有轮廓集合中的点的位置信息中的一个或几个数据获得。所述精确比较为将各个字形的属性一一比对。
在其他的一些实施方案中,还可以直接根据该字形的图像信息,通过图像匹配的方式,获得相比较的两个字形是否相同。比较的方式,本领域的技术人员可以合理选择。
举例说明,获取两个字体文件,分别为字体文件A和字体文件B,建立字形旧新位置对照索引表为合并字体库的索引,当字形旧新位置对照索引表为空时,则记录下字体A的字形旧新位置对照索引,随后进行字体合并;如果字形旧新位置对照索引表不为空,直接进行字体合并。本实施例中,字形旧新位置对照索引表为空,将字体文件A先存入了合并数据库中,开始字体文件B的合并,过程为:遍历字体B的字形,获取字形B1,将字形B1与字体A的字形逐一进行模糊比对,如果模糊比对不一样,就表示字形不一样,则进行下一个字形的比对;如果模糊比对一样,那么进行精准比对,直接进行各个字形属性的一一比对,如果一样就表示两个字形是一样的则忽略B1处理,跳出本次循环,否则是不一样,再获取下一个字形进行比较。最终完成比较后,如果字形B1在A中没找到一样的字形,那么就将字形B1拷贝到字体A中。如果B1在字体A中找到一样的,那么就不进行处理。并将字形B1的旧新位置对照索引值到总字形旧新位置对照索引表中。依次类推,完成字体B中所有字形在字体A中的查找。最后完成字体B和字体A的合并,并返回字体A和B的旧新字形位置对照索引表。
完成待合并字体集合的前两个字体的合并后,得到了合并字体库,其中,继续获取第三个字体文件C,与原合并字体库进行合并,重复上述比较过程,完成字体C到原合并字体库的合并。依次类推完成待合并字体集合的字体合并,并返回旧新字形位置对照索引表,得到最终的合并字体库。
完成一个待合并字体集合的字体合并后,继续其他集合的合并,最后完成所有待合并字体集合的合并。
该方案中,通过收集同名字体的方式,通过字形比较,完成重复字形的删除以及字体的合并,消减字体中的重复字形,大大减少了字体数据及存储大小,提高了文档显示时的加载速度。
实施例2
本施例提供一种基于文档中内嵌字体的优化方法的具体的应用实例,用于优化文档中内嵌字体,删除内嵌字体中的重复字形数据。包括以下三个步骤,例如对应某本PDF书籍,具体实施方式如下:
第一步、字体收集,获取文档中内嵌字体的字体信息,所述字体信息包括字体名称及其对应的字体文件。导入一本书籍类PDF文档,提取出整个文档所有文字的字体信息,并记录字体名与字体文件对应表,比如字体A1对应字体名称“FontA”,及对应字体文件“A1.ttf”,字体A2对应自己名称“FontA”,对应字体文件“A2.ttf”,字体A3对应自己名称“FontA”,对应字体文件“A3.ttf”等。比如字体B1对应字体名称“FontB”,及对应字体文件“B1.ttf”,字体B2对应自己名称“FontB”,对应字体文件“B2.ttf”,字体B3对应自己名称“FontB”,对应字体文件“B3.ttf”等
根据这些字体名进行比较,将相同的字体对应的字体信息加入字体集合,形成聚类。根据第一步所获得的字体信息,其中可能存在多个字体信息对应同一字体的情况,即将A1、A2、A3归类到“A”字体待合并集合中,将B1、B2、B3归类到“B”字体待合并集合中。
第二步、字体解析,获取所述字体文件中的字形及其属性信息。根据聚类结果,有待合并字体集合A和B,获取待合并自己集合A,获取集合A中的字体A1和A2的字体文件,分别为“A1.ttf”和“A2.ttf”。分别解析字体“A1.ttf”和“A2.ttf”,获取字形集合及每个字形的详细属性集合,属性包括字形的UNICODE码、索引位置、宽、高、轮廓线、hint数据等可用于精准比对,并根据字形的宽、高、轮廓线集合个数、轮廓线矩形框数据、所有轮廓线集合中的点的位置信息进行CRC64编码,计算出每一个字形的指纹数据,用于字形模糊比对。比如字体“A1.ttf”中存在字形:“中”“填”“汗”“超”,字体“A2.ttf”中存在字形:“国”“填”“汗”“际”,字体“A3.ttf”中存在的字形:“呢”“天”“飞”“超”。
第三步、字体合并模块:当是第一次进行合并的时候,先将字体“A1.ttf”的字形旧新位置对照表记录下来,否则直接进行后续合并过程。见图4,先遍历字体“A2.ttf”的字形,获取字形GraphicA21“国”,将字形GraphicA21与字体A的字形逐一进行模糊比对,即拿GraphicA21和字体“A1.ttf”中存在字形“中”“填”“汗”“超”进行比对。发现模糊比对都不一样,那么GraphicA21字形在字体A中不存在,将B1字体拷贝到字体A中。后面继续字形GraphicA22“填”与字体“A1.ttf”中存在字形“中”“填”“汗”“超”进行比对,模糊比对到字体“A1.ttf”的第二个字形是一样的,就进行精确比对,精确比对,会将所有字形数据进行一一比对,精确比对的范围比较广,所有能收集到的信息都将进行比较。最后返回比对结果。依次类推,完成字体A2中所有字形在字体A1中的查找。最后完成集合A的合并。合并结果为RA1,包含字形为“中”“填”“汗”“超”“填”“际”。并记录下旧新字形索引表:
{
{A1.{(0,0),(1,1),(2,2),(3,3)},
{A2.{(0,4),(1,1),(2,2),(3,5)}
}
完成待合并字体集合的前两个字体的合并后,得到了合并结果字体RA1,继续获取第三个字体A3,与字体RA1进行合并,重复步骤四的过程,完成字体A3到字体RA1的合并。依次类推完成待合并字体集合的字体合并,最后合并成RA字体,并返回旧新字形索引对应表。
{
{A1.{(0,0),(1,1),(2,2),(3,3)},
{A2.{(0,4),(1,1),(2,2),(3,5)},
{A3.{(0,6),(1,7),(2,8),(3,3)}}
}
完成一个A待合并字体集合的字体合并后,同样继续B集合的合并,最后完成所有待合并字体集合的合并。
本发明中的基于文档中内嵌字体的优化方法,采用收集同名字体的方式,通过字形比较,完成重复字形的删除,及字体的合并,消减字体中的重复字形,大大减少字体数据及存储大小。采用字形模糊及精准两种比较方式相结合进行字体合并,降低了数据运算量,提高运算速度。解决了现有技术中字体数据是自定义编码或无编码的情况下无法进行字体数据的合并的问题,能进行有效的字体合并,所有拥有内嵌字体数据的文档均可应用此方法进行处理,包括PDF、CEBX、OFD等。
实施例3
本施例提供一种一种基于文档中内嵌字体的优化装置,结构框图如图5所示,包括:
字体收集单元01,获取文档中内嵌字体的字体信息,所述字体信息包括字体名称及其对应的字体文件;
字体解析单元02,获取所述字体文件中的字形及其属性信息;
字体合并单元03,根据所述字形及其属性信息,将字体名称相同的字体文件进行合并。
其中,字体合并单元包括:
合并字体库建立子单元,建立合并字体库;
待合并字体文件获取子单元,获取待合并字体文件;
合并子单元,判断所述合并字体库是否为空,若所述合并字体库为空,则将所述待合并字体文件中的字形及其属性信息加入所述合并字体库中;
信息获取子单元,如果所述合并字体库不为空,获取所述待合并字体文件中的一个字形及其属性信息;
循环处理子单元,将该字形及其属性信息依次与所述合并字体库中的每个字形及其属性信息进行比较,若不同则将该字形及其属性信息增加到所述合并字体库中,若相同则继续获取待合并字体文件中的下一个字形及其属性信息,循环本步骤,遍历所述待合并字体文件中的所有字形及其属性信息。
其中,循环处理子单元包括比对子单元,首先将该字形及其属性信息与所述合并字体库中的每个字形及其属性信息进行模糊比对,如果模糊比对不一致,则判断为不同,若模糊比对一致,则进行精确比较,若精确比较相同,则判断为相同,否则为不同。
其中,所述模糊比对根据指纹数据来判断,所述指纹数据为根据字形的宽、高、轮廓线集合个数、轮廓线矩形框数据、所有轮廓集合中的点的位置信息中的一个或几个数据获得。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,上述实施例仅仅是为清楚地说明所作的举例,而并非对实施方式的限定。对于所属领域的普通技术人员来说,在上述说明的基础上还可以做出其它不同形式的变化或变动。这里无需也无法对所有的实施方式予以穷举。而由此所引伸出的显而易见的变化或变动仍处于本发明创造的保护范围之中。