專利名稱:一種字體文件的嵌入方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于字體技術(shù)領(lǐng)域,特別涉及字體文件的嵌入方法及裝置。
背景技術(shù):
文字是一份電子文檔的主要內(nèi)容,而任何文字都不能脫離字體而單獨(dú)存
在,目前大多數(shù)電子文檔都使用了 TrueType字體。由于中文字符較多,并且 字形復(fù)雜,所以中文字體的字體文件都比較大。GB2312-80《信息交換用漢字 編碼字符集基本集》共收錄了 6763個簡體漢字,GBK碼收錄了 21003個漢字, 而單、雙、四字節(jié)混合編碼的GB18030-2000標(biāo)準(zhǔn)更是收錄了 27000個漢字。 與上述字符集對應(yīng)的漢字字庫文件一般都在1謹(jǐn)B以上。為了保證電子文檔的 文字所采用的字體在不同的軟、硬件環(huán)境下顯示正確,可以考慮將字體文件嵌 入到電子文檔中,這樣即使在沒有該字體的計(jì)算機(jī)上也可以正常顯示字體。 字體文件中包括glyf表、loca表和Hmtx表。
字形數(shù)據(jù)存儲在glyf表中。眾多字形(Glyph )數(shù)據(jù)的順序排列。TrueType 字體文件中的字形數(shù)據(jù)有兩種形式,即簡單類型字形和復(fù)合類型字形。簡單 類型字形數(shù)據(jù)直接通過若干條Bezier曲線描述字形的輪廓;而復(fù)合類型字形 則通過若干個簡單類型字形和復(fù)合類型字形的放縮變換描述字形的輪廓,實(shí)際 上是一種對現(xiàn)有字形數(shù)據(jù)的復(fù)用。當(dāng)字體引擎解析復(fù)合字形時(shí),必須找到所有 該復(fù)合類型字形所引用的簡單類型字形才能輸出該字的位圖,即對于復(fù)合類型 字形在glyf表內(nèi)的字形數(shù)據(jù)為其所引用的簡單類型字形數(shù)據(jù)的索引。glyf表 內(nèi)部順序存》文了所有的字形數(shù)據(jù)。
loca表沒有表頭,其內(nèi)部記錄了字形索引(Glyph Index )到字形(Glyph)
數(shù)據(jù)偏移量的一對一映射關(guān)系。根據(jù)TrueType文件4各式規(guī)范可知,loca表存 在兩種格式,即短格式和長格式。當(dāng)loca使用短格式時(shí),表內(nèi)部為一個SHORT 類型(2字節(jié))的數(shù)組;當(dāng)loca使用長格式時(shí),表內(nèi)部為一個UL0NG類型(4 字節(jié))的數(shù)組。字體文件中的head表中的indexToLocFormat字段指明了該字 體文件使用了上述兩種格式中的哪一種。
由字形索引(Glyph Index)計(jì)算字形數(shù)據(jù)偏移量(Glyph Offset)的計(jì) 算規(guī)則是
若head表中的indexToLocFormat值為1,則使用公式A計(jì)算字形數(shù)據(jù)的 偏移量;若indexToLocFormat值為0,則使用公式B計(jì)算字形數(shù)據(jù)的偏移量。 (offsets為loca表內(nèi)部的2字節(jié)或4字節(jié)數(shù)組) 公式A: GlyphOffset = offsets [Glyphlndex*4] 公式B: GlyphOffset = offsets [Glyphlndex*2] Hmtx表記錄了所有字形數(shù)據(jù)(Glyph)的Metrix信息。 就當(dāng)前而言,嵌入到電子文檔內(nèi)部的字體文件體積較大,嵌入后電子文檔 的體積通常會大幅增加,這是與電子出版物要求的文件小巧,傳輸便捷的特點(diǎn) 相沖突的。
發(fā)明內(nèi)容
為了解決嵌入到電子文檔內(nèi)部的字體文件體積較大,嵌入后電子文檔的體 積通常會大幅增加的問題,本發(fā)明實(shí)施例提供了一種字體文件的嵌入方法,包 括
在字體文件中獲取待嵌入字符的字形數(shù)據(jù);
重新分配所獲取的字形數(shù)據(jù)的字形索引的索引號,重新分配的最大索引號 小于未重新分配前最大索引號;
按照重新分配的字形索引號順序,將字形數(shù)據(jù)重新記錄在glyf表中; 按照重新分配的字形數(shù)據(jù)的索引號,獲取字形數(shù)據(jù)對應(yīng)的偏移量;
將重新分配的字形索引的索引號和字形數(shù)據(jù)對應(yīng)的偏移量的映射關(guān)系,記
錄在loca表中;
修改字體文件maxp表的numGlyphes和hhea表的number0f HMetrics數(shù)據(jù) 域的值,使之等于字形數(shù)據(jù)的數(shù)量; 將字體文件嵌入到電子文檔中。
同時(shí)本發(fā)明實(shí)施例還提供一種字體文件的嵌入裝置,包括 字形數(shù)據(jù)獲取^^塊用于在字體文件中獲取待嵌入字符的字形數(shù)據(jù); 分配模塊用于重新分配所獲取的字形數(shù)據(jù)的字形索引的索引號,重新分
配的最大索引號小于未重新分配前最大索引號;
glyf表修改模塊用于按照重新分配的字形索引號順序,將字形數(shù)據(jù)重新
記錄在glyf表中;
偏移量獲取模塊用于按照重新分配的字形數(shù)據(jù)的索引號,獲取字形數(shù)據(jù) 對應(yīng)的偏移量;
loca表修改模塊用于將重新分配的字形索引的索引號和字形數(shù)據(jù)對應(yīng)的 偏移量的映射關(guān)系,記錄在loca表中;
maxp表修改模塊用于修改字體文件maxp表的謹(jǐn)Glyphes和hhea表的 numberOfHMetrics數(shù)據(jù)域的值,使之等于字形數(shù)據(jù)的數(shù)量;
字體文件嵌入模塊用于將字體文件嵌入到電子文檔中。
由本發(fā)明4是供的具體實(shí)施方案可以看出,正是由于重新分配字形數(shù)據(jù)的字 形索引的索引號,按照重新分配的字形索引號順序,將字形數(shù)據(jù)重新記錄在 glyf表,同樣修改loca表,使得新生成的glyf表和loca表不必再攜帶不必要的 內(nèi)容,字體文件體積較小。
圖1為本發(fā)明提供的第一實(shí)施例方法流程圖2為本發(fā)明提供的第一實(shí)施例解析復(fù)合類型字形數(shù)據(jù)的方法流程圖3為本發(fā)明提供的第二實(shí)施例裝置結(jié)構(gòu)圖。
具體實(shí)施例方式
本發(fā)明提供的第一實(shí)施例是一種字體文件的嵌入方法,以將楷體字體文件 待嵌入字符為"中國人民",嵌入到電子文檔為例,方法流程如圖1所示,包 括
步驟101:根據(jù)"中"對應(yīng)的字體文件在cmap表中的數(shù)據(jù),將"中"字的 Unicode字符映射到字體文件中的Glyphlndex (字形索引)1000;
步驟102:根據(jù)字體文件現(xiàn)有l(wèi)oca表,得到"中"字對應(yīng)的字形索引 Glyphlndex的索引號"1000"對應(yīng)的字形數(shù)據(jù)在現(xiàn)有g(shù)lyf表中的字形數(shù)據(jù)的 GlyphOffset(偏移量)為"10023",同時(shí)得到字形索引的索引號為Glyphlndex "1001"對應(yīng)的字形數(shù)據(jù)在現(xiàn)有g(shù)lyf表中的字形數(shù)據(jù)GlyphOff set (偏移量) "10123";
步驟103:根據(jù)字形數(shù)據(jù)偏移量GlyphOffset "10023"和"10123",在現(xiàn) 有g(shù)lyf表查找并獲取到"中"字的字形數(shù)據(jù)GlyphData。
步驟101-103僅是以Unicode編碼為例,通過Unicode查找并獲取字形 (Glyph)數(shù)據(jù)的過程。
如果提前知道待提取字符的字形索引,還通過如下步驟獲取字形(Glyph) 數(shù)據(jù)執(zhí)行步驟102和步驟103,利用已知的字形索引獲得相應(yīng)的字形數(shù)據(jù)。 由上述步驟可知,通過現(xiàn)有技術(shù),有多種方式可獲得相應(yīng)的字形數(shù)據(jù)。
步驟104:解析字形數(shù)據(jù),對欲添加到待嵌入的字體文件中的字形數(shù)據(jù), 重新分配字形索引的索引號(Glyph Index)。如在現(xiàn)有技術(shù)中"中國人民"中 的"中"對應(yīng)的字形索引的索引號為"1000","國"對應(yīng)的字形索引的索引號 為"2000","人"對應(yīng)的字形索引的索引號為"3000","民"對應(yīng)的字形索引 的索引號為"4000,,。為"中""國,,"人""民"重新分配字形索引(Glyph Index), 例如分別分配為T、 "2"、 "3"、 "4",或者"4"、 "3"、 "2"、 T,或者"3"、"4"、 'T,、 "2"。重新分配的原則為重新分配后的字形索引的最大索引號, 小于未重新分配時(shí)字形索引的最大索引號,在本實(shí)施例中,從新分配的最大索 引號小于"民"對應(yīng)的字形索引的索引號"4000"。作為優(yōu)選的方案,重新連 續(xù)分配字形索引的索引號,作為進(jìn)一步優(yōu)選的方案,重新連續(xù)分配的字形索引 的索引號從l開始。
步驟105:修改字體文件的glyf表,按照新字形索引的順序'T,、 "2"、 "3"、 "4"輸出"中國人民,,對應(yīng)的字形數(shù)據(jù)到glyf表中。
步驟106:按照重新分配的字形數(shù)據(jù)的字形索引號"1"、 "2"、 "3"、 "4", 獲取"中國人民,,對應(yīng)的字形數(shù)據(jù)偏移量分別為"0" "100" "330" "450"。
步驟107: ^修改字體文件的loca表,將重新分配的字形索引和字形數(shù)據(jù)對 應(yīng)的偏移量的映射關(guān)系保存在loca表。重新分配后"中"字對應(yīng)的字形索引 的索引號為'T,,對應(yīng)的偏移量為"0",將它們的映射關(guān)系保存在loca表中。
步驟108:修改字體文件的maxp表和hhea表中的謡Glyphes和 numberOfHMetrics數(shù)據(jù)域的值,使之等于被嵌入的字形數(shù)據(jù)的數(shù)量4。
步驟109:生成表目錄,記錄每個表項(xiàng)的偏移量等信息。
步驟110:將字體文件嵌入到電子文檔中。
由于重新分配字形數(shù)據(jù)的字形索引的索引號,按照重新分配的字形索引號 順序,將字形數(shù)據(jù)重新記錄在glyf表,同樣修改loca表。修改后的glyf表和loca 表只記錄了待嵌入字符的字形數(shù)據(jù)和與之對應(yīng)的字形索引的相關(guān)數(shù)據(jù),相對于 現(xiàn)有技術(shù),去除了非待嵌入字符的字形數(shù)據(jù)和與之對應(yīng)的字形索引的相關(guān)數(shù) 據(jù)。新生成的glyf表和loca表不必再攜帶不必要的內(nèi)容,字體文件體積較小。
為了減少字體文件的體積,進(jìn)一步還可以刪除字體文件的cmap表。
字形數(shù)據(jù)包括簡單字形數(shù)據(jù)如"中"對應(yīng)的字形數(shù)據(jù)和復(fù)雜字形數(shù)據(jù)如 "國"對應(yīng)的字形數(shù)據(jù),對于解析復(fù)合字形數(shù)據(jù),重新連續(xù)分配字形索引的方 法流程圖如圖2所示,具體過程如下
步驟201:解析該復(fù)合類型字形數(shù)據(jù),并為該復(fù)合類型字形數(shù)據(jù)(Glyph)
重新分配一個新的字形索引(Glyph Index),同時(shí)為#1其引用的字形數(shù)據(jù)重新 分配一個新的字形索引。如"國"對應(yīng)的字形數(shù)據(jù)為復(fù)合類型字形數(shù)據(jù),其引 用"口"和"玉"對應(yīng)的字形數(shù)據(jù),為"國"對應(yīng)的字形數(shù)據(jù)重新分配一個字 形索引為"2",并為"口"和"玉,,對應(yīng)的字形數(shù)據(jù)重新分配字形索引分別為 "5" "6"。
步驟202:檢查是否存在引用其他復(fù)合類型字形數(shù)據(jù)的情況。 若存在引用復(fù)合類型字形數(shù)據(jù)的情況,重復(fù)執(zhí)行步驟201,解析新出現(xiàn)的
復(fù)合類型字形;反之,若引用的字形數(shù)據(jù)全部是簡單字形數(shù)據(jù),就跳轉(zhuǎn)至步驟
203終止解析。
在步驟201和步驟202中可能存在多個復(fù)合字形同時(shí)引用相同字形的情況, 這時(shí)只需保存一傷"陂多次引用的字形數(shù)據(jù),減少數(shù)據(jù)的重復(fù)。
在解析字形數(shù)據(jù)時(shí)需要區(qū)分簡單類型和復(fù)合類型的字形數(shù)據(jù)。上面介紹了 對復(fù)合類型的字形數(shù)據(jù)的解析過程,在此過程中解析的結(jié)果為被解析的字形數(shù) 據(jù)本身和被其引用的字形數(shù)據(jù)分配的新的字形索引。
進(jìn)一步優(yōu)化的方案還包括修改字體文件的hmtx表,提取待嵌入字符的 Metrix信息,并按照新分配的字形索引順序,重新記錄每個字形的Metrix信 白
本發(fā)明提供的第二實(shí)施例是一種字體文件的嵌入裝置,其結(jié)構(gòu)如圖3所示, 包括
字形數(shù)據(jù)獲取模塊301:用于在字體文件中獲取待嵌入字符的字形數(shù)據(jù);
分配^t塊302:用于重新分配所獲取的字形數(shù)據(jù)的字形索引的索引號,重 新分配的最大索引號小于未重新分配前最大索引號;
glyf表修改模塊303:用于按照重新分配的字形索引號順序,將字形數(shù)據(jù) 重新記錄在glyf表中;
偏移量獲取模塊304:用于按照重新分配的字形數(shù)據(jù)的索引號,獲取字形 數(shù)據(jù)對應(yīng)的偏移量;
loca表修改模塊305:用于將重新分配的字形索引的索引號和字形數(shù)據(jù)對 應(yīng)的偏移量的映射關(guān)系,記錄在loca表中;
maxp表》務(wù)改4莫塊306:用于^f奮改字體文件maxp表的n咖Glyphes和hhea 表的numberOfHMetrics數(shù)據(jù)域的值,使之等于字形數(shù)據(jù)的數(shù)量;
字體文件嵌入^t塊307:用于將字體文件嵌入到電子文檔中。
明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及 其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
權(quán)利要求
1、一種字體文件的嵌入方法,其特征在于,包括在字體文件中獲取待嵌入字符的字形數(shù)據(jù);重新分配所獲取的字形數(shù)據(jù)的字形索引的索引號,重新分配的最大索引號小于重新分配前最大索引號;按照重新分配的字形索引號順序,將字形數(shù)據(jù)重新記錄在glyf表中;按照重新分配的字形數(shù)據(jù)的索引號,獲取字形數(shù)據(jù)對應(yīng)的偏移量;將重新分配的字形索引的索引號和字形數(shù)據(jù)對應(yīng)的偏移量的映射關(guān)系,記錄在loca表中;修改字體文件maxp表的numGlyphes和hhea表的numberOfHMetrics數(shù)據(jù)域的值,使之等于字形數(shù)據(jù)的數(shù)量;將字體文件嵌入到電子文檔中。
2、 如權(quán)利要求1所述的方法,其特征在于,重新分配所獲取的字形數(shù)據(jù)的字形索引的索引號的步驟具體為 重新連續(xù)分配待嵌入字符字形數(shù)據(jù)的字形索引的索引號。
3、 如權(quán)利要求2所述的方法,其特征在于,重新連續(xù)分配待嵌入字符字 形數(shù)據(jù)的字形索引的索引號從l開始遞增編碼。
4、 如權(quán)利要求1所述的方法,其特征在于,所述將字體文件嵌入到電子 文檔中的步驟前還包括刪除字體文件cmap表。
5、 如權(quán)利要求1所述的方法,其特征在于,所述將字體文件嵌入到電子 文檔中的步驟前還包括修改字體文件hmtx表,提取待嵌入字符字形數(shù)據(jù)的Metrix信息,并按照 新分配的字形索引順序,重新記錄提取的Metrix信息到hmtx表。
6、 如權(quán)利要求1所述的方法,其特征在于,所述字形數(shù)據(jù)包括簡單字形數(shù)據(jù)和/或復(fù)合字形數(shù)據(jù)。
7、 如權(quán)利要求6所述的方法,其特征在于,若字形數(shù)據(jù)為簡單字形數(shù)據(jù), 直接為該簡單類型字形數(shù)據(jù)重新分配新的字形索引。
8、 如權(quán)利要求6所述的方法,其特征在于,若字形數(shù)據(jù)為復(fù)合字形數(shù)據(jù),首先為復(fù)合類型字形數(shù)據(jù)重新分配新的字形索引,再為被其引用的字形數(shù)據(jù)重 新分配新的字形索引。
9、 如權(quán)利要求8所述的方法,其特征在于,還包括 檢查是否存在引用其他復(fù)合類型字形數(shù)據(jù)的步驟;若存在引用復(fù)合類型字形數(shù)據(jù),重復(fù)復(fù)合類型字形數(shù)據(jù)字形索引重新分配 的步驟,若引用的字形數(shù)據(jù)全部是簡單字形數(shù)據(jù),直接為該簡單類型字形數(shù)據(jù) 重新分配新的字形索引。
10、 一種字體文件的嵌入裝置,其特征在于,包括 字形數(shù)據(jù)獲取模塊用于在字體文件中獲取待嵌入字符的字形數(shù)據(jù); 分配模塊用于重新分配所獲取的字形數(shù)據(jù)的字形索引的索引號,重新分配的最大索引號小于未重新分配前最大索引號;glyf表修改模塊按照重新分配的字形索引號順序,將字形數(shù)據(jù)重新記錄 在glyf表中;偏移量獲取^f莫塊用于按照重新分配的字形數(shù)據(jù)的索引號,獲取字形數(shù)據(jù) 對應(yīng)的偏移量;loca表修改模塊用于將重新分配的字形索引的索引號和字形數(shù)據(jù)對應(yīng)的 偏移量的映射關(guān)系,記錄在loca表中;maxp表修改模塊用于修改字體文件maxp表的numGlyphes和hhea表的 numberOfHMetrics數(shù)據(jù)域的值,使之等于字形數(shù)據(jù)的數(shù)量;字體文件嵌入it塊用于將字體文件嵌入到電子文檔中。
全文摘要
本發(fā)明公開了一種字體文件的嵌入方法及裝置,為了解決嵌入到電子文檔內(nèi)部的字體文件體積較大,嵌入后電子文檔的體積通常會大幅增加的問題,本發(fā)明公開的方法包括獲取待嵌入字符的字形數(shù)據(jù);重新分配字形數(shù)據(jù)的字形索引的索引號,重新分配的最大索引號小于重新分配前最大索引號;按照索引號順序,將字形數(shù)據(jù)重新記錄在glyf表中;獲取字形數(shù)據(jù)對應(yīng)的偏移量;索引號和偏移量的映射關(guān)系,重新記錄在loca表中;修改字體文件maxp表的numGlyphes和hhea表的numberOfHMetrics數(shù)據(jù)域的值,使之等于字形數(shù)據(jù)的數(shù)量;將字體文件嵌入到電子文檔中。由于重新分配索引號,因此glyf表和loca表不必?cái)y帶非必要內(nèi)容,字體文件的體積較小。
文檔編號G06F17/30GK101187939SQ20071017793
公開日2008年5月28日 申請日期2007年11月22日 優(yōu)先權(quán)日2007年11月22日
發(fā)明者何震生, 源 劉, 毅 王 申請人:北大方正集團(tuán)有限公司;北京方正阿帕比技術(shù)有限公司;北京大學(xué)