簡體   English   中英

在運行時無法在外部SWF中加載CFF嵌入字體

[英]Trouble loading CFF embedded fonts in an external SWF at runtime

我們有一個大型Flash網站,該網站已翻譯成11種語言。 我們有一個字體加載系統,通過該字體加載系統,以每種語言顯示站點所需的所有字符都嵌入到外部swfs(因此為11 swfs)中。

該站點的最新更新要求我們對文本顯示的一個區域使用文本布局框架(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中加載的字體有關。

我認為此問題與此處列出的問題有關: 使用在運行時加載的嵌入式字體的示例Flex 4運行時加載的模塊 ,盡管本文引用的是Flex 4構建,而我們的文章是純Flash 10構建。

好吧,經過大量的挖掘,我找到了答案。 原來我們使用的是編譯器參數

-managers flash.fonts.AFEFontManager

它指示編譯器在對字體進行代碼轉換時使用AFEFontManager,而不是默認值(BatikFontManager / AFEFontManager / JREFontManager)。 這些字體管理器將字體文件轉換為矢量輪廓以在Flash中呈現。 這里有更多信息: 關於字體管理器

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

查看實際使用哪種方法嵌入字體的簡單方法是檢查Font.enumerateFonts()返回的字體的fontType屬性。 如果值為“ embedded”,則使用DefineFont3;如果值為“ embeddedCFF”,則使用DefineFont4。

希望這可以幫助某人!

我發現這非常有用: “默認情況下,MX組件使用TextField進行文本顯示,而TextField不能使用CFF字體。如果被告知使用嵌入式字體,但沒有該字體可以使用的字體或字形,則TextField將顯示空白。 Spark組件使用FTE,而FTE需要CFF字體,因此混合使用是有問題的。您可以兩次嵌入一個字體(CFF為true和false),但效率不高。在大多數情況下,如果使用MXFTEText。 css文件或選中項目屬性中的復選框,MX組件將切換為使用FTE和CFF字體。” 作者:Alex Harui-2010年9月2日晚上9:12

可以看出這里就涉及到這個問題的非常詳細(長)的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM