Flex 4 для встраивания шрифтов для компонентов Spark - PullRequest
2 голосов
/ 06 января 2011

У меня проблема с встраиванием шрифтов в Open Source Flex 4.5 SDK (Hero), хотя у меня такие же проблемы с Flex 4 Open Source SDK. Я добавил некоторые ttf-файлы в каталог assets моей структуры проекта и пытаюсь получить доступ к шрифтам в моем CSS-файле следующим образом:

@font-face { 
src: url("../assets/DroidSans.ttf"); 
fontFamily: DroidSans;
embedAsCFF: true; 
}

Этот конкретный шрифт требуется использовать для ряда элементов управления искрой по всему проекту (именно поэтому для embedAsCFF задано значение true, хотя я считаю, что этот параметр в любом случае является необязательным). Однако ни один из компонентов spark не отображает этот шрифт, если он установлен в свойстве fontFamily. Я получаю эту ошибку при компиляции для каждого компонента spark, на котором я пытаюсь установить шрифт:

предупреждение: несовместимый встроенный шрифт 'DroidSans' указан для (controlName). Этот компонент требует, чтобы встроенный шрифт был объявлено с embedAsCff = true.

Как ни странно, вышеуказанный шрифт работает с компонентами mx, даже если для embedAsCFF задано значение true (из того, что я посмотрел по этому вопросу, следует установить значение false для компонентов mx и значение true для spark).

Приведенный выше код также работает в Flash Builder, однако этот проект необходимо разрабатывать с использованием Open Source SDK, где он терпит неудачу.

Есть идеи? Неужели у кого-то еще была такая же проблема?

При запуске следующего скрипта он показывает, что шрифты «встроены», но не как «CFFEmbedded». В документации Adobe говорится, что они должны сказать «CFFEmbedded»

var fontArray:Array = Font.enumerateFonts(false); 
trace("Fontarray length: " + fontArray.length); 
for(var j:int = 0; j < fontArray.length; j++) { 
    var thisFont:Font = fontArray[j]; 
    trace("FONT " + j + ":: name: " + thisFont.fontName + " embedded as type:" + thisFont.fontType + "."); 
} 

Спасибо

Bob

[EDIT]

ОК - мне наконец-то удалось встроить шрифт. Я пробовал SWC из CS4, SWC из Flash Builder 4, SWF из CS4 и Flash Builder ....

Возможное исправление

1) Упакуйте шрифт в SWF в Flash Builder 4 2) Ссылка на скомпилированный SWF с использованием следующего CSS

    @font-face {
        cff: false;
        src: url('../bin/DroidSansFont.swf');
        fontFamily: DroidSansMX;
    }

    @font-face {
        cff: true;
        src: url('../bin/DroidSansFont.swf');
        fontFamily: DroidSans;

    }

Сумасшедшая вещь - использование директивы "cff: true". Вся документация говорит об использовании «embedAsCFF». Это выдает ошибку при использовании атрибута "cff" - похоже, работает.

Понятия не имею - может кто-нибудь поделится своими идеями?

Ответы [ 3 ]

0 голосов
/ 30 мая 2011

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

MXML:

<fx:Style>
    @namespace s "library://ns.adobe.com/flex/spark";
    @namespace mx "library://ns.adobe.com/flex/mx";
    @font-face {
        src: url("fonts/files/HelveticaNeueLTPro-Md.otf");
        font-family: HelveticaNeueLTPro-Md;
        embed-as-cff: true;
    }

    @font-face {
        src: url("fonts/files/HelveticaNeueLTPro-Bd.otf");
        font-family: HelveticaNeueLTPro-Bd;
        embed-as-cff: true;
    }

    .helvetica {
        font-family: HelveticaNeueLTPro-Md;
        font-lookup: embeddedCFF;
    }
    .helveticaBold {
        font-family: HelveticaNeueLTPro-Bd;
        font-lookup: embeddedCFF;
    }
</fx:Style>

Как вы видите, это для шрифта HelveticaNeue (обычный и жирный) в формате OpenType, но у меня также был успех с TrueType. Важным атрибутом CSS было « font-lookup: embeddedCFF ». Как только я не установил это, компиляция работала, но встроенный шрифт никогда не отображался. То же самое касается загрузки SWF-файлов, созданных утилитой fontswf - у меня тоже никогда не получалось.

0 голосов
/ 09 сентября 2013

Описанная проблема, вероятно, вызвана использованием набора по умолчанию диспетчеров шрифтов .Вам необходимо использовать CFFFontManager .Как правило, вы определяете всех четырех возможных менеджеров, чтобы разрешить некоторый запасной вариант.Обычно это проблема приложения MX, пытающегося использовать искровые компоненты.

см. Также: http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7e09.html

и, возможно: https://docs.sonatype.org/display/FLEXMOJOS/Using+Adobe+Font+Manager+to+embed+fonts

Конфигурация для Flexmojos следует (выможно использовать аналогичные для файлов flex-config.xml, см. ссылку выше):

<fonts> 
  <managers> 
    <manager-class>flash.fonts.JREFontManager</manager-class> 
    <manager-class>flash.fonts.BatikFontManager</manager-class> 
    <manager-class>flash.fonts.AFEFontManager</manager-class> 
    <manager-class>flash.fonts.CFFFontManager</manager-class> 
  </managers> 
</fonts> 

Обратите внимание, что предпочтительный менеджер находится внизу.

0 голосов
/ 17 января 2011

Вероятно, вы используете более старый SDK и компилятор, "cff" был переименован в "embedAsCFF" в последних сборках SDK, начиная со сборки Flex SDK 4.0.7972, см. Обсуждение http://forums.adobe.com/thread/36399 для комментария от Flex SDK инженер, который доказывает, что

...