Проблема при загрузке встроенных шрифтов CFF во внешний SWF во время выполнения - PullRequest
0 голосов
/ 29 ноября 2010

У нас есть большой флеш-сайт, который переведен на 11 языков. У нас есть система загрузки шрифтов, при которой все символы, необходимые для отображения сайта на каждом языке, встроены во внешние SWF-файлы (таким образом, 11 SWF-файлов).

Недавнее обновление сайта требует от нас использования Text Layout Framework (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] в тот же класс (т. Е. Встраиваем в тот же SWF), что и мой код TLF, шрифт отображается правильно. Так что, похоже, это касается только шрифтов, загруженных во внешние SWF-файлы.

Я думаю, что эта проблема связана с перечисленным здесь: Пример использования встроенных шрифтов, загруженных во время выполнения Загруженные модули Flex 4 во время выполнения , хотя этот пост относится к сборке Flex 4, тогда как у нас чистый Flash 10 билд.

Ответы [ 2 ]

3 голосов
/ 30 ноября 2010

Хорошо, после долгих поисков я нашел ответ.Оказывается, мы использовали аргумент компилятора

-managers flash.fonts.AFEFontManager

, который указывает компилятору использовать AFEFontManager при перекодировании шрифтов, а не по умолчанию (BatikFontManager / AFEFontManager / JREFontManager).Эти менеджеры шрифтов берут файлы шрифтов и превращают их в векторные контуры, которые будут отображаться во Flash.Здесь больше информации: Об менеджерах шрифтов .

Кажется, что когда этот аргумент включен, все шрифты внедряются с использованием старого метода DefineFont3, а не DefineFont4 (CFF), даже есливы используете тег embedAsCff="true".

Простой способ узнать, какой метод фактически использовался для встраивания шрифта, - проверить свойство fontType шрифтов, возвращаемых Font.enumerateFonts().Если значение «внедрено», то был использован DefineFont3, если это «внедрено CFF», то был использован DefineFont4.

Надеюсь, это кому-нибудь поможет!

0 голосов
/ 22 августа 2011

Я нашел это очень полезным: "По умолчанию компоненты MX используют TextField для отображения текста, и TextField не может использовать шрифты CFF. TextField будет показывать пробелы, если сказано использовать встроенные шрифты, но нет шрифта, который он может Используйте или глифы для этого символа в шрифте. Компоненты Spark используют FTE, а для FTE требуются шрифты CFF. Таким образом, смешивать эти два проблематично. Вы можете встроить шрифт дважды, как с CFF true, так и false, но это не очень эффективно. В большинстве случаев если вы используете файл MXFTEText.css или установите флажок в свойствах проекта, компоненты MX переключатся на использование шрифтов FTE и CFF. " от Alex Harui - 9:12 PM 2 сентября 2010

Как видно здесь на очень подробном (и длинном) объяснении, связанном с предметом.

...