場景:在Adobe Flex中,爲什麼嵌入式字體的行爲與系統中安裝的字體行爲不同
Flex應用程序利用@ font-face聲明嵌入字體。 (嵌入字體需要能夠旋轉文本。)
該應用程序最初是作爲英文應用程序開發的,但在本地化期間,找到能夠顯示亞洲字符的unicode字體變得非常必要。該應用程序的原始實現使用四種字體來滿足字符強調的各種排列。粗體,粗斜體,斜體和正常都通過Arial系列中相應的Arial字體提供。
問題:
當試圖在字體爲一體,可用於粗體,斜體編譯,並通過類似粗斜體(是它的不理想,這只是一個測試,看它是否可以做):
@font-face { src:url("/fonts/ArialUnicode.ttf");
fontFamily: myFamily;
fontWeight: normal;
fontStyle: normal;
advancedAntiAliasing: true; }
@font-face { src:url("/fonts/ArialUnicode.ttf");
fontFamily: myFamily;
fontWeight: bold;
fontStyle: normal;
advancedAntiAliasing: true; }
etc.
的問題是,在編譯應用程序時,Flex變得暴躁,並提供了以下錯誤信息:
因此,經過一番調查後發現,由於Unicode既不支持斜體字也不支持粗體,因此當Flex編譯器試圖嵌入字體時,它會感到不快,因爲它無法在滿足css要求的指定位置找到字體。
現在,當字體面聲明帶回其最簡單的形式:
@font-face { src:url("/fonts/ArialUnicode.ttf");
fontFamily: myFamily;
fontWeight: normal;
fontStyle: normal;
advancedAntiAliasing: true; }
一切編譯罰款和應用程序顯示一切正常體重,正常風格亞洲字符罰款。但是,在樣式表中顯示要以粗體或斜體顯示的內容時,會出現一個框,表示沒有嵌入字體,也沒有可以呈現該字體的任何系統字體。
現在,這裏是它變得奇怪。
如果在系統上安裝完全相同的Unicode字體,它將開始以粗體和斜體顯示亞洲字符。這是沒有意義的,因爲當Flex試圖嵌入該字體以滿足上述CSS樣式時,Bold和Italic字符不在字體中。然而,顯然這種字體正在被用來顯示粗體和斜體字符,就像以前它們只是作爲系統字體安裝之前的盒子一樣。這是一種Flex伏都教嗎?如果是這樣的話,我可以通過編程的方式調用所說的voodoo,因爲我不能依賴用戶不得不出去並在他們的系統上安裝unicode字體。
編輯: 這裏有一些進一步的信息可以澄清問題。
我的問題不是真的如何爲羅馬字符做多個字體的面和權重,而是「Flex如何將粗體和斜體應用於系統字體,甚至當它說該字體不支持這些字體時當試圖嵌入該字體。「
使問題可再現的步驟是這樣的:
- 僅嵌入MS宋體的Unicode到應用和部署。
- 在新的Windows 2003機器上,打開Firefox並選擇日語。
- 導航到應用程序URL並查看粗體和斜體應該放在哪個框中。
- 現在退出Firefox。將MS Arial Unicode字體安裝到Windows 2003系統中。
- 打開Firefox並重復。過去是盒子的區域現在是粗體/粗體斜體/斜體日文字符。
這不是如此解決這個問題。有很多可行的解決方案。然而,我真正想知道的是,Flex如何將粗體和斜體應用於不支持粗體或斜體的字體。
感謝, Ç
這與嵌入式編程沒有任何關係,但由於信譽不足而無法保留。 – 2010-04-27 13:20:27
也許它是因斜體,粗體和窄組合的其他字體文件而變得困惑? – 2010-04-27 13:21:07
感謝Lasse,我沒有在帖子中描述它,但我們實際上是根據瀏覽器如何識別自己來加載單獨的模塊。運行時應用程序唯一的嵌入字體是Unicode字體,因爲如果客戶端響應它是日文或中文區域設置,我們不會加載其他字體。 – 2010-04-27 14:37:14