2

シナリオ:

フォントを埋め込むために @font-face 宣言を利用する Flex アプリケーション。(テキストを回転できるようにするには、埋め込みフォントが必要です。)

このアプリケーションはもともと英語のアプリケーションとして開発されましたが、ローカライズ中に、アジアの文字を表示できる Unicode フォントを見つけることが必要になりました。アプリケーションの元の実装では、4 つのフォントを使用して、文字強調のさまざまな順列に対応しています。Bold、Bold Italic、Italic、および Normal はすべて、対応する 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 は Italics も Bold もサポートしていないため、Flex コンパイラがフォントを埋め込もうとすると、css 要件を満たす指定された場所にフォントを見つけることができないため、問題が発生することが判明しました。

font-face 宣言を最も単純な形式に戻すと、次のようになります。

@font-face { src:url("/fonts/ArialUnicode.ttf"); 
             fontFamily: myFamily;
             fontWeight: normal;
             fontStyle: normal;
             advancedAntiAliasing: true; }

すべて正常にコンパイルされ、アプリケーションは通常の太さ、通常のスタイルのアジア文字を正常に表示します。ただし、スタイル シートで太字または斜体で表示されるものを表示すると、それらのスタイルでその文字をレンダリングできる埋め込みフォントもシステム フォントもないことを示すボックスが表示されます。

ここからが奇妙になります。

まったく同じ Unicode フォントがシステムにインストールされている場合、アジア文字が太字と斜体で表示され始めます。上記の css スタイルを満たすために Flex がそのフォントを埋め込もうとしたときに示されたように、太字と斜体の文字がフォントに含まれていないため、これは意味がありません。しかし、このフォントがシステム フォントとしてインストールされる前は、太字と斜体の文字を単なるボックスとして表示するために使用されていることは明らかです。これはある種の Flex ブードゥー教ですか? もしそうなら、ユーザーが外出してシステムにUnicodeフォントをインストールしなければならないことに頼ることができないので、プログラムでブードゥーを呼び出すことができる方法があります。

編集:問題を明確にする可能性のある追加情報を次に示します。

私の質問は、ローマ字の複数のフォントフェイスと太さをどのように行うかではなく、「Flex はシステムフォントに太字と斜体をどのように適用するのですか?そのフォント。」

問題を再現可能にする手順は次のとおりです。

  1. MS Arial Unicode のみをアプリケーションに埋め込み、展開します。
  2. 新しい Windows 2003 マシンで、Firefox を開き、日本語を選択します。
  3. アプリケーションの URL に移動し、太字と斜体のボックスを表示します。
  4. Firefox を終了します。MS Arial Unicode フォントを Windows 2003 システムにインストールします。
  5. Firefox を開いて繰り返します。以前はボックスだった領域が、太字/太字斜体/斜体の日本語文字になりました。

この問題を解決する方法はそれほど重要ではありません。実行可能なソリューションはたくさんあります。しかし、私が本当に知りたいのは、Flex が太字や斜体をサポートしていないと言うフォントにどのように太字や斜体を適用するかということです。

ありがとう、C

4

1 に答える 1

5

問題は、4 つのフォント バリアントすべてに同じファイル名を指定していることです。1 つの ArialUnicode.ttf ファイルには、1 つのバリアントのみが含まれます。

c:\Windows\fonts ディレクトリの名前を使用して、arial.ttf、arialbd.ttf、arialbi.ttf、および ariali.ttf を埋め込みます。これらは、それぞれ通常、太字、太字イタリック、イタリック バリアントです。

技術的な観点からも法的な観点からも、すべてのフォントを自由に埋め込むことができるわけではないことに注意してください。

法的には、フォントはソフトウェアであるため、プログラムに含める他のサードパーティ コードと同様にライセンスを取得する必要があります。Bitstream Veraフォント ファミリは自由にライセンスされているため、参照することをお勧めします。このファミリは、Linux などでコア フォントとして使用されるように設計された、非常に優れた機能を備えています。

技術的な側面は、これらの規則が TTF および OTF ファイル形式に組み込まれていることです。Flex コンパイラなどのツールは、ファイルで宣言されているライセンス制限に従います。フォントが「埋め込みなし」とマークされている場合、埋め込みは許可されません。

于 2010-04-27T13:44:18.477 に答える