向pdf文件内嵌单字节字体的方法及其系统的制作方法

文档序号:6584712阅读:207来源:国知局

专利名称::向pdf文件内嵌单字节字体的方法及其系统的制作方法
技术领域
:本发明涉及排版
技术领域
,尤其涉及一种向PDF文件内嵌单字节字体的方法及其系统。
背景技术
:PDF(PortableDocumentFormat,可携带文档格式)是Adobe公司开发的电子文件格式。这种文件格式与操作系统平台无关,即,PDF文件不管是在Windows,Unix还是在MacOS操作系统中都是通用的。这一特点使它成为在hternet上进行电子文档发行和数字化信息传播的理想文档格式。越来越多的电子图书、产品说明、公司文告、网络资料、电子邮件开始使用PDF文件。PDF文件目前已成为数字化信息事实上的一个工业标准。PDF文件是为了支持跨平台上的多媒体集成的信息出版和发布,为了达到此目的,PDF具有许多其他电子文档格式无法相比的优点。PDF文件可将文字、字型、格式、颜色及独立于设备和分辨率的图形图像等封装在一个文件中。PDF文件还可以包含超文本链接、声音和动态影像等电子信息,支持特长文件,集成度和安全可靠性都较高。字体内嵌是PDF技术中一个重要的分支,内嵌了字体的PDF文件在呈现时不依赖呈现程序字体环境的特性,对保持呈现内容的稳定极其重要。因此,大量针对PDF的应用将字体完全或部分内嵌的PDF文件作为推荐甚至是强制的要求。目前,实现PDF字体内嵌的方法将产生PS(P0StScript)数据流作为中间步骤,即,先将待内嵌的PDF文件转换为PS流,之后把PS流转再换为内嵌了字体的PDF文件,也就是说,在将PS流转换为PDF文件的过程中,实现字体内嵌功能。此方法的主要问题在于PDF和PS相互转换的过程相当复杂,容易引入错误,造成最终得到的PDF与原始的待内嵌的PDF在内容上出现差异;同时这个两步转换的过程在效率上也比较低。
发明内容本发明实施例提供了一种向PDF文件内嵌单字节字体的方法及其系统,用以解决现有技术中由于将产生PS数据流作为向PDF文件内嵌字体的中间步骤所导致的易出错和效率低的问题。为实现上述目标,本发明实施例提供如下的技术方案一种向PDF文件内嵌单字节字体的方法,包括确定出待内嵌字体的PDF文件所使用的但未嵌入到该PDF文件中的单字节字体,以及所述单字节字体的字体描述信息;确定出所述待内嵌字体的PDF文件中,使用所述单字节字体进行文字输出的所有字符及其字符名字或字形标识,根据所述单字节字体的字体文件获取与所述字符名字或字形标识对应的字形描述信息;根据获取到的字体描述信息,以及获取到的字形描述信息,生成嵌入所述待嵌入单字节字体后的PDF文件。一种向PDF文件内嵌单字节字体的系统,包括字体描述信息确定模块,用于确定出待内嵌字体的PDF文件所使用的但未嵌入到该PDF文件中的单字节字体,以及所述单字节字体的字体描述信息;字形描述信息获取模块,用于确定出所述待内嵌字体的PDF文件中,使用所述单字节字体进行文字输出的所有字符及其字符名字或字形标识,根据所述单字节字体的字体文件获取与所述标识对应的字形描述信息;PDF文件生成模块,用于根据获取到的字体描述信息,以及获取到的字形描述信息,生成嵌入所述待嵌入单字节字体后的PDF文件。本发明的上述实施例中,根据待内嵌字体的PDF文件所使用的但未嵌入到该PDF文件中的单字节字体,确定待嵌入的单字节字体,并获取待嵌入的单字节字体的字体描述信息;以及,确定出所述待内嵌字体的PDF文件中,使用所述待嵌入单字节字体进行文字输出的所有字符及其字符名字或字形标识,然后从待嵌入单字节字体的字体文件中获取与所述标识对应的字形描述信息;最后根据获取到的字体描述信息,以及获取到的字形描述信息,生成嵌入所述待嵌入单字节字体后的PDF文件。由于上述确定待嵌入单字节字体的过程、获取字体描述信息的过程,以及获取字形描述信息的过程,都可通过解析待嵌入字体的PDF文件实现,因此与现有技术相比,省去了PS数据流的转换过程,从而简化了PDF文件内嵌字体的流程,减少了由于PS数据流转换所导致的错误几率,并提高了字体内嵌的效率。图1为本发明实施例向PDF文件内嵌单字节字体的流程示意图之一;图2为本发明实施例向PDF文件内嵌单字节字体的流程示意图之二;图3为本发明实施例向PDF文件内嵌单字节字体的系统的结构示意图。具体实施例方式为解决上述现有技术存在的问题,本发明实施例提供了一种向PDF文件内嵌单字节字体的方法及其系统,使在解析待内嵌字体的PDF文件的同时,直接生成目标PDF文件(即内嵌了字体的PDF文件),在生成目标文件的过程中内嵌单字节字体的字形描述。与现有技术相比,由于避免了中间格式的使用,从而能更好地保证目标文件的正确性,提高内嵌操作的效率。下面结合附图对本发明实施例进行详细描述。对于一个作为输入的待内嵌字体的原始PDF文件(以下称原始文件),为了在其基础上生成一个作为输出的、内嵌字体的PDF文件(以下称目标文件),在本发明实施例中,根据如图1所示的步骤生成目标文件步骤101、解析原始PDF文件,确定出该PDF文件所使用、但未嵌入到该PDF文件的字体,从中确定出待嵌入的单字节字体(如英文字体);根据确定出的待嵌入的单字节字体,获取待嵌入单字节字体的字体描述信息,其中可包括字体编码方式信息和字体名称;步骤102、通过解析原始PDF文件的内容流,确定出该原始PDF文件中使用待嵌入单字节字体进行文字输出的所有字符,并根据这些字符所属的字体类型和编码方式,将字符经编码映射得到这些字符对应的标识(如字符名字或字形标识),并从待嵌入单字节字体的字体文件中获取与这些字符的标识对应的字形描述信息;步骤103、将到的字形描述信息组织成符合PDF文件规范的字体程序(fontprogram)数据流,将该字体程序数据流与获取到的字体描述对象作为内嵌到PDF文件中的字体文件数据,从而生成目标PDF文件。上述流程中,确定出的待嵌入的单字节字体,可以是该原始PDF文件所使用但未内嵌的所有单字节字体,或是其中的一部分单字节字体。上述流程可通过相应的软件系统实现。下面通过图2,描述利用本发明实施例的软件系统,在PDF文件中嵌入该PDF文件所使用的、但未内嵌到该PDF文件中的所有单字节字体的详细流程。为了方便实现本发明实施例,可使用如下集合作为实现该流程时用于存储中间数据的数据存储模块待嵌入字体集合是一个包含所有待嵌入单字节字体的字体对象的简单集合。解析原始文件时,每发现一个待嵌入单字节字体(以字体对象的形式存在),就在集合中增加一条记录,不计重复(即对于同一个字体对象被使用多次的情况仅保存对应的一条记录);待嵌入字体描述集合是一个包含所有待嵌入单字节字体的字体描述对象的简单集合。不计重复(即对于同一个字体描述对象被引用多次的情况仅保存对应的一条记录;待嵌入字符集合是一个以字体对象为索引的、包含该字体在原始文件中被使用的所有字符的集合。在此集合中,字符以字符名字(CharacterName)或字形标识(GlyphID)的形式被记录,不计重复(即对于同一个字符被使用多次的情况仅保存一条对应的记录)。如图2所示,通过本发明实施例的软件系统,在PDF文件中嵌入单字节字体的过程,包括步骤201、解析原始文件,获取其使用的所有未内嵌的单字节字体的字体对象(Font对象),并将这些对象保存在待嵌入字体集合中。通常,PDF中的Rmt对象是以PDF字典对象的形式存在于PDF文件,通过查找原始PDF文件的PDF字典对象可确定出该PDF文件所使用的但未内嵌的单字节字体。Font对象中包含字体名、编码方式或字体描述等有关字体的重要信息。步骤202、对于待嵌入字体集合中的所有单字节字体的字体对象,查找其对应的字体描述对象(FontDescriptor),并将查找到的字体描述对象保存在待嵌入字体描述集合中。通常,FontDescriptor对象以字典对象的形式存在于PDF文件。步骤203、解析原始PDF文件中所有的内容流,对于其中所有涉及文字输出的指令,获取其使用的字体以及输出的字符的编码,对于其中使用了待嵌入的单字节字体的每个输出字符,根据其字体类型和编码方式,采用相应的方式获取这些字符的字符名字或字形标识,并将获取到的字符名字或字形标识保存到以字体描述为索引的待嵌入字符集合中。该步骤中,对于Typel(CID)类型的字体,将字符经编码映射后得到字符名字(CharacterName);对于TrueType(CID)类型的字体,将字符经编码映射后得到字符名字,之后,再通过查询TrueType字体文件中的字形标识表得到对应的字符名字(Glyph)。编码映射的方法是通过查找编码映射表找到与字符编码对应的字符名字,编码映射表是每个字体描述对象包含的一个属性。步骤204、构造字体程序数据流。如果待嵌入的单字节字体是Typel(CID)类型,则构造CFF字体程序数据流;如果待嵌入的单字节字体是TrueType(CID)类型,则构造TrueType(CID)字体程序数据流;如果待嵌入的单字节字体既包括Typel(CID)类型又包括TrueType(CID)类型,则构造CFF字体程序数据流和TrueType(CID)字体程序数据流。步骤205、在待嵌入字体描述集合中,通过由字体描述构成的索引定位到其中的一个字体描述,读取该字体描述所对应的所有字符名字或字形标识,在字体文件中分别查找对应的字形描述信息,将查找到的字形描述信息写入对应的字体程序数据流。该步骤中,如果当前字体描述所对应的字体是Typel(CID)类型,则执行以下步骤在待嵌入字符集合中,以当前字体描述作为索弓丨,遍历其下的各字符名字(CharacterName),根据各字符名字(CharacterName)在Typel(CID)字体文件中查找对应的字形描述信息,如果字符名字中包含子字符名字,则还需要查找子字符名字对应的子字符的字形描述信息;然后将查找到的字形描述信息按照CFF字体程序规范存入之前构造的CFF数据流中;如果当前字体描述对应的字体是TrueType(CID)类型,则执行以下步骤在待嵌入字符集合中,以当前字体描述作为索引,遍历其下的各字形标识(GlyphID),根据各字形标识在TrueType(CID)字体文件中查找对应的字形描述信息,如果字形标识中包含子字符的字形标识,则还需要查找子字符的字形标识对应的子字符字形描述信息;然后,将获取到的字形描述信息按照TrueType(CID)字体程序规范存入之前构造的TrueType(CID)数据流中。步骤206、针对待嵌入字符集合中的所有字体描述所对应的字符名字和字形标识,是否都已将对应的字形描述信息写入字体程序数据流,即,是否将待内嵌字符集合中的字符名字和字形标识所对应的字形描述信息都写入字体程7序数据流,若是,则执行步骤207;否则,返回步骤205。步骤207、将字体程序数据流写入目标PDF文件,将待内嵌字体描述集合中所记录的字体描述对象按照PDF规范写入目标PDF文件。其中,将Typel(CID)类型字体的字体描述对象,按照PDF规范中关于CFF字体内嵌的规范进行必要的修改后(主要是引用生成的CFF数据流),写入目标PDF文件;将TrueType(CID)类型字体的字体描述对象,按照PDF规范中关于TrueType(CID)字体内嵌的规范进行必要的修改后(主要是引用生成的TrueType(CID)数据流),写入目标PDF文件。步骤208、遍历原始PDF文件中的对象,除了那些已经通过上述步骤写入目标PDF文件中的字体描述对象以外,将其它所有对象不做修改,存入目标PDF文件。上述流程的步骤202中,获取到的待嵌入字体的字体描述信息可以选择性地包含该字体在原始PDF文件中使用过的字符的集合(如字符集的标识或名称等信息),以便在后续嵌入字体的过程中获取字形描述信息时,仅需根据相应字体文件中包含的该字符集合,从该字符集合中获取对应的字形描述信息写入目标PDF文件,这样,在内嵌字体时只内嵌字体的一个最小化子集,该子集只包含字体中被原始PDF文件使用过的字符,从而减小目标PDF文件的数据量。基于相同的技术构思,本发明实施例还提供了能够实现向PDF文件内嵌单字节字体的系统,如图3所示,该系统包括字体描述信息确定模块301、字形描述信息获取模块302,以及PDF文件生成模块303;其中,字体描述信息确定模块301,用于确定出待内嵌字体的PDF文件所使用的但未嵌入到该PDF文件中的单字节字体,以及所述单字节字体的字体描述信息;字形描述信息获取模块302,用于确定出所述待内嵌字体的PDF文件中,使用所述单字节字体进行文字输出的所有字符及其字符名字或字形标识,根据所述单字节字体的字体文件获取与所述标识对应的字形描述信息;PDF文件生成模块303,用于根据获取到的字体描述信息,以及获取到的字形描述信息,生成嵌入所述待嵌入单字节字体后的PDF文件。上述的字体描述信息确定模块301可包括文件解析子模块3011,用于解析待内嵌字体的PDF文件;待嵌入字体及其描述确定子模块3012,用于根据文件解析子模块3011解析出的PDF文件的PDF字典对象确定出该PDF文件所使用的但未内嵌的单字节字体,以及该单字节字体的字体描述信息。上述字形描述信息获取模块302可包括内容流解析子模块3021,用于解析所述待嵌入字体的PDF文件的内容流,得到所有涉及文字输出的指令;字符及其标识获取子模块3022,用于根据内容流解析子模块3021解析出的所述指令确定出使用所述待嵌入单字节字体进行文字输出的字符;以及,根据确定出的输出字符所属的字体类型和对应的编码方式,获取所述输出字符的字符名字或字形标识。如果输出字符所属的字体类型是Typel类型,则获取到的是字符名字,如果输出字符所属的字体类型是TrueType类型,则获取到的是字形标识,其根据字体类型以及进一步根据编码方式获取字符名字或字形标识的过程如前所述;字形描述信息获取子模块3023,用于根据所述单字节字体的字体文件获取与所述标识对应的字形描述信息。字形描述信息获取模块302还包括字体文件加载子模块30M,用于根据待嵌入字体及其描述确定子模块3012确定出的单字节字体的字体描述信息,加载相应的字体文件。字形描述信息获取子模块3023获取字形描述信息时,从加载的字体文件中获取与所述标识对应的字形描述信息。上述PDF文件生成模块303可包括字体程序数据流构造子模块3031,用于根据待嵌入的单字节字体所属的字体类型,构造对应的字体程序数据流;字体程序数据流写入子模块3032,用于将获取到的字形描述信息存入对应的字体程序数据流;PDF文件写入子模块3033,用于将保存有字形描述信息的字体程序数据流,以及待嵌入单字节字体的字体描述信息写入目标PDF文件,所述目标PDF文件为嵌入所述待嵌入单字节字体后的PDF文件。显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。权利要求1.一种向PDF文件内嵌单字节字体的方法,其特征在于,包括以下步骤确定出待内嵌字体的PDF文件所使用的但未嵌入到该PDF文件中的单字节字体,以及所述单字节字体的字体描述信息;确定出所述待内嵌字体的PDF文件中,使用所述单字节字体进行文字输出的所有字符及其字符名字或字形标识,根据所述单字节字体的字体文件获取与所述字符名字或字形标识对应的字形描述信息;根据获取到的字体描述信息,以及获取到的字形描述信息,生成嵌入所述待嵌入单字节字体后的PDF文件。2.如权利要求1所述的方法,其特征在于,确定所述待内嵌字体的PDF文件中,使用所述待嵌入单字节字体进行文字输出的所有字符及其字符名字或字形标识,包括通过解析所述待嵌入字体的PDF文件的内容流,得到所有涉及文字输出的指令,根据所述指令确定出使用所述待嵌入单字节字体进行文字输出的字符的编码;根据确定出的输出字符所属的字体类型和输出字符的编码,获取所述输出字符的字符名字或字形标识。3.如权利要求2所述的方法,其特征在于,根据确定出的输出字符所属的字体类型输出字符的编码,获取所述输出字符的字符名字或字形标识,包括若所述输出字符所属的字体类型是Typel类型,则根据字符编码与字符名字的映射关系,得到所述输出字符的编码所对应的字符名字;若所述输出字符所属的字体类型是TrueType类型,则根据字符编码与字符名字的映射关系,得到所述输出字符的编码所对应的字符名字,再根据TrueType字体文件中字符名字与字形标识的映射关系,得到对应的字形标识。4.如权利要求1所述的方法,其特征在于,根据所述单字节字体的字体文件获取与所述标识对应的字形描述信息,包括根据所述单字节字体的字体描述信息,加载相应的字体文件;从加载的字体文件中获取与所述标识对应的字形描述信息。5.如权利要求4所述的方法,其特征在于,所述单字节字体的字体描述信息中包括该字体在所述待内嵌字体的PDF文件中所使用的字符集信息;从加载的字体文件中获取与所述标识对应的字形描述信息时,仅根据所述单字节字体的字体描述信息中携带的字符集信息,从加载的单字节字体文件中的相应字符集获取字形描述信息。6.如权利要求1所述的方法,其特征在于,根据获取到的字体描述信息,以及获取到的字形描述信息,生成嵌入所述待嵌入单字节字体后的PDF文件,包括根据待嵌入的单字节字体所属的字体类型,构造对应的字体程序数据流;将获取到的字形描述信息存入对应的字体程序数据流;将保存有字形描述信息的字体程序数据流,以及待嵌入单字节字体的字体描述信息写入目标PDF文件,所述目标PDF文件为嵌入所述待嵌入单字节字体后的PDF文件。7.如权利要求6所述的方法,其特征在于,如果所述字符的标识中包括子字符的字符名字或字形标识,则在获取字形描述信息时还包括从所述待嵌入单字节字体的字体文件中获取与所述子字符的字符名字或字形标识对应的字形描述信息;以及,在将字形描述信息存入对应的字体程序数据流时,还包括将所述子字符的字形描述信息存入对应的字体程序数据流。8.—种向PDF文件内嵌单字节字体的系统,其特征在于,包括字体描述信息确定模块,用于确定出待内嵌字体的PDF文件所使用的但未嵌入到该PDF文件中的单字节字体,以及所述单字节字体的字体描述信息;字形描述信息获取模块,用于确定出所述待内嵌字体的PDF文件中,使用所述单字节字体进行文字输出的所有字符及其字符名字或字形标识,根据所述单字节字体的字体文件获取与所述标识对应的字形描述信息;PDF文件生成模块,用于根据获取到的字体描述信息,以及获取到的字形描述信息,生成嵌入所述待嵌入单字节字体后的PDF文件。9.如权利要求8所述的系统,其特征在于,所述字形描述信息获取模块,包括内容流解析子模块,用于解析所述待嵌入字体的PDF文件的内容流,得到所有涉及文字输出的指令;字符及其标识获取子模块,用于根据所述指令确定出使用所述待嵌入单字节字体进行文字输出的字符的编码;以及,根据确定出的输出字符所属的字体类型和输出字符的编码,获取所述输出字符的字符名字或字形标识;字形描述信息获取子模块,用于根据所述单字节字体的字体文件获取与所述标识对应的字形描述信息。10.如权利要求9所述的系统,其特征在于,所述字符及其标识获取子模块根据确定出的输出字符所属的字体类型和输出字符的编码,获取所述输出字符的字符名字或字形标识,包括若所述输出字符所属的字体类型是Typel类型,则根据字符编码与字符名字的映射关系,得到所述输出字符的编码所对应的字符名字;若所述输出字符所属的字体类型是TrueType类型,则根据字符编码与字符名字的映射关系,得到所述输出字符的编码所对应的字符名字,再根据TrueType字体文件中字符名字与字形标识的映射关系,得到对应的字形标识。11.如权利要求8所述的系统,其特征在于,所述字形描述信息获取模块还包括字体文件加载子模块,用于根据所述单字节字体的字体描述信息,加载相应的字体文件;所述字形描述信息获取子模块获取字形描述信息时,从加载的字体文件中获取与所述标识对应的字形描述信息。12.如权利要求8所述的系统,其特征在于,所述PDF文件生成模块,包括字体程序数据流构造子模块,用于根据待嵌入的单字节字体所属的字体类型,构造对应的字体程序数据流;字体程序数据流写入子模块,用于将获取到的字形描述信息存入对应的字体程序数据流;PDF文件写入子模块,用于将保存有字形描述信息的字体程序数据流,以及待嵌入单字节字体的字体描述信息写入目标PDF文件,所述目标PDF文件为嵌入所述待嵌入单字节字体后的PDF文件。全文摘要本发明公开了一种向PDF文件内嵌单字节字体的方法及其系统,本发明方法包括确定出待内嵌字体的PDF文件所使用的但未嵌入到该PDF文件中的单字节字体,以及所述单字节字体的字体描述信息;确定出所述待内嵌字体的PDF文件中,使用所述单字节字体进行文字输出的所有字符及其字符名字或字形标识,根据所述单字节字体的字体文件获取与所述字符名字或字形标识对应的字形描述信息;根据获取到的字体描述信息,以及获取到的字形描述信息,生成嵌入所述待嵌入单字节字体后的PDF文件。采用本发明,可解决现有技术中由于将产生PS数据流作为向PDF文件内嵌单字节字体的中间步骤所导致的易出错和效率低的问题。文档编号G06F17/22GK102063415SQ20091023813公开日2011年5月18日申请日期2009年11月16日优先权日2009年11月16日发明者刘佳峰,姚磊申请人:北京北大方正电子有限公司,北大方正集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1