2010-11-29 41 views
0

我們有一個大的Flash網站,它被翻譯成11種語言。我們有一個字體加載系統,所有用來顯示每種語言的站點所需的字符都嵌入到外部swfs中(所以11個swfs)。無法在運行時在外部SWF中加載CFF嵌入字體

對網站的最新更新要求我們爲文本顯示的一個區域使用文本佈局框架(TLF),這當然只支持嵌入新CFF格式的字體。我試圖使用標記embedAsCFF="true"嵌入第二個字體實例,並且在加載字體SWF後,我可以看到該字體正確註冊,因爲它顯示在由Font.enumerateFonts返回的數組中。

我使用的TextFlow實例具有以下屬性設置:

textFlow.fontLookup = FontLookup.EMBEDDED_CFF; 
textFlow.renderingMode = RenderingMode.CFF; 
textFlow.fontFamily = "HeadingFontCFF"; 

但是所顯示沒有找到嵌入字體的文本。它以Times New Roman設備字體顯示。我很確定我的TLF設置正確,因爲當我將[Embed]標記放入與我的TLF代碼相同的類(即嵌入相同的SWF)時,字體顯示正確。所以它似乎只涉及在外部SWF中加載的字體。

我認爲這個問題與這裏列出的問題有關:Example of using embedded fonts loaded at runtime Flex 4 runtime loaded modules,雖然這篇文章是指Flex 4版本,而我們的版本是純Flash 10版本。

回答

3

好吧,經過大量的挖掘,我找到了答案。事實證明,我們用的是編譯器參數

-managers flash.fonts.AFEFontManager 

其指示編譯器代碼轉換字體時,而不是默認的(BatikFontManager/AFEFontManager/JREFontManager)使用AFEFontManager。這些字體管理器將字體文件轉換爲矢量輪廓以便在Flash中呈現。這裏有更多的信息:About the font managers

看來,包含此參數時,即使使用標記embedAsCff="true",也會使用舊的DefineFont3方法而不是DefineFont4(CFF)嵌入所有字體。

查看實際用於嵌入字體的方法的一種簡單方法是檢查由Font.enumerateFonts()返回的字體的fontType屬性。如果值是「嵌入」,則使用DefineFont3,如果它是「embeddedCFF」,則使用DefineFont4。

希望這可以幫助那裏的人!

+0

還有一個我上面引用的Adobe鏈接的更新版本:http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7e09.html – geo 2010-11-30 16:53:24

0

我發現這非常有用:「默認情況下,MX組件使用TextField進行文本顯示,TextField不能使用CFF字體。如果TextField被告知使用嵌入字體,但沒有可用的字體或字形中的字符,Spark組件使用FTE,FTE需要CFF字體,因此混合使用這兩種字體會產生問題,您可以嵌入兩次字體,兩種都使用CFF true和false,但效率不高,大多數情況下if您使用MXFTEText.css文件或選中項目屬性中的複選框,MX組件將切換爲使用FTE和CFF字體。「作者:Alex Harui - 2010年9月2日下午9:12

看到here關於這個問題非常詳細(和長)的解釋。