Сценарий:
Приложение 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 становится капризным и выдает следующее сообщение об ошибке:
[ERROR] /dirpath/Style.css:[49,-1] exception during transcoding: Font for alias 'myFont' with italic style was not found at: file:/dirpath/fonts/ArialUnicode.ttf
Таким образом, с некоторым исследованием было установлено, что, поскольку Unicode не поддерживает ни курсив, ни Bold, что, когда компилятор Flex пытается внедрить шрифт, он становится несчастным, так как не может найти шрифт в указанном месте, которое будет удовлетворять требованию CSS.
Теперь, когда объявление font-face возвращается к простейшей форме:
@font-face { src:url("/fonts/ArialUnicode.ttf");
fontFamily: myFamily;
fontWeight: normal;
fontStyle: normal;
advancedAntiAliasing: true; }
все компилируется нормально, и приложение отображает весь нормальный вес, нормальный стиль азиатских символов отлично. Однако при отображении объектов, которые должны отображаться жирным шрифтом или курсивом в таблице стилей, появляется поле, обозначающее, что в нем нет ни встроенного шрифта, ни системного шрифта, который может отображать этот символ в этих стилях.
Теперь вот где это становится странным.
Если в системе установлен точно такой же шрифт Unicode, азиатские символы начнут отображаться жирным шрифтом и курсивом. Это не имеет смысла, так как символы Bold и Italic отсутствуют в шрифте, как продемонстрировано, когда Flex попытался внедрить этот шрифт для соответствия указанным выше стилям CSS. Тем не менее, очевидно, что этот шрифт используется для отображения символов, выделенных жирным шрифтом и курсивом, как прежде, чем они были просто прямоугольниками, прежде чем он был установлен в качестве системного шрифта. Это какой-то флекс вуду? И если так, то есть какой-то способ, которым я могу программно вызвать упомянутый voodoo, поскольку я не могу полагаться на то, что пользователь должен выйти и установить шрифт Unicode в своей системе.
Edit:
Вот некоторая дополнительная информация, которая может прояснить проблему.
Мой вопрос на самом деле не в том, как мы делаем несколько граней шрифтов и весов для римских символов, это «Как Flex применяет жирный шрифт и курсив к системному шрифту. Тем более, когда он говорит, что этот шрифт не поддерживает те, когда пытаясь вставить этот шрифт. "
Шаги, чтобы сделать проблему воспроизводимой, таковы:
- Внедрить в приложение только MS Arial Unicode и развернуть его.
- На новой машине с Windows 2003 откройте Firefox и выберите японский язык.
- Перейдите к URL-адресу приложения и просмотрите поля, где должны быть жирный шрифт и курсив.
- Теперь выйдите из Firefox. Установите шрифт MS Arial Unicode в систему Windows 2003.
- Откройте Firefox и повторите. Области, которые раньше были прямоугольниками, теперь выделены жирным шрифтом / полужирным курсивом / курсивом. Японские символы.
Не так много, как решить эту проблему. Есть много жизнеспособных решений. Однако я действительно хотел бы знать, как Flex применяет жирный шрифт и курсив к шрифту, который, как он говорит, не поддерживает жирный шрифт или курсив.
Спасибо,
C