2010-04-27 11 views
2

Scénario:Dans Adobe Flex, pourquoi une version embarquée d'une police, se comportent différemment de la même police installée dans le système

application Flex utilisant une @ font-face déclaration pour intégrer la police. (Les polices incorporées sont nécessaires pour pouvoir faire pivoter le texte.)

L'application a été développée à l'origine en tant qu'application en anglais, mais lors de la localisation, il est devenu nécessaire de trouver une police Unicode capable d'afficher les caractères asiatiques. L'implémentation originale de l'application utilise quatre polices pour satisfaire les diverses permutations de l'accent de caractère. Bold, Bold Italic, Italic et Normal sont tous fournis via les polices Arial correspondantes de la famille Arial.

Problème:

Lorsque vous essayez de compiler dans la police comme celui qui pourrait être utilisé pour le gras, italique et gras italique par quelque chose comme (oui ce ne est pas idéal, c'était juste un test pour voir si elle pourrait être fait):

@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. 

le problème est que lors de la compilation de l'application Flex obtient de mauvaise humeur et donne le message d'erreur suivant:

[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

Avec un peu d'investigation, Unicode ne supporte ni l'italique ni le gras. Lorsque le compilateur Flex tente d'incorporer la police, il n'est pas satisfait car il ne trouve pas de police à l'emplacement spécifié.

Maintenant, quand la déclaration font-face est prise à sa forme la plus simple de:

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

tout fin et compile l'application affiche tous les poids normal, style normal des caractères asiatiques bien. Toutefois, lors de l'affichage des éléments à afficher en gras ou en italique dans la feuille de style, une boîte apparaît indiquant qu'il n'existe aucune police incorporée ni aucune police système pouvant rendre ce caractère dans ces styles.

Maintenant, c'est ici que ça devient bizarre.

Si la même police Unicode est installée sur le système, elle commence à afficher les caractères asiatiques en gras et en italique. Cela n'a aucun sens car les caractères gras et italique ne sont pas dans la police, comme démontré lorsque Flex a essayé d'intégrer cette police pour satisfaire les styles css ci-dessus. Pourtant, il est évident que cette police est utilisée pour afficher les caractères gras et italique comme avant ils étaient juste des boîtes avant qu'il a été installé comme une police système. Est-ce une sorte de Flex vaudou? Et si tel est le cas, je peux invoquer par programme le dit vaudou car je ne peux pas compter sur l'utilisateur qui doit sortir et installer la police Unicode sur son système.

Editer: Voici d'autres informations susceptibles de clarifier le problème. Ma question n'est pas vraiment de savoir comment faire plusieurs polices de caractères et de poids pour les caractères romains, c'est "Comment Flex applique-t-il des caractères gras et des italiques à une police système? Encore plus quand il dit que cette police ne supporte pas ces caractères en essayant d'intégrer cette police. "

Les mesures pour la question sont reproductibles tels:

  1. Intégrer uniquement Arial Unicode MS dans l'application et la déployer.
  2. Sur une nouvelle machine Windows 2003, ouvrez Firefox et sélectionnez la langue japonaise.
  3. Accédez à l'URL de l'application et affichez les zones où le gras et l'italique doivent être.
  4. Maintenant, quittez Firefox. Installez la police MS Arial Unicode dans le système Windows 2003.
  5. Ouvrez Firefox et répétez. Les zones qui étaient auparavant des boîtes sont maintenant en caractères gras/italiques gras/italiques.

Ce n'est pas tellement la façon de résoudre ce problème. Il y a beaucoup de solutions viables. Cependant, ce que j'aimerais vraiment savoir, c'est comment Flex applique-t-il du gras et de l'italique à une police qui, selon elle, ne prend pas en charge le gras ou l'italique?

Merci, C

+0

Ceci n'a rien à voir avec la programmation embarquée mais ne peut pas être retaginé en raison d'une réputation insuffisante. –

+0

Peut-être que cela devient confus à cause des autres fichiers de police d'air pour les combinaisons italiques, gras et étroites? –

+0

Merci Lasse, je ne l'ai pas décrit dans le post, mais nous sommes en train de charger des modules séparés en fonction de la façon dont le navigateur s'identifie. La seule police incorporée au moment de l'exécution pour l'application est celle avec la police Unicode car nous ne chargeons pas les autres polices si le client répond qu'il s'agit d'un paramètre régional japonais ou chinois. –

Répondre

5

Le problème est que vous spécifiez le même nom de fichier pour les quatre variantes de police. Le seul fichier ArialUnicode.ttf contient une seule variante. En utilisant les noms de votre répertoire c: \ Windows \ fonts, vous souhaitez intégrer arial.ttf, arialbd.ttf, arialbi.ttf et ariali.ttf. Ce sont les variantes normale, gras, gras-italique et italique, respectivement.

Attention, toutes les polices ne peuvent pas être intégrées librement, tant d'un point de vue technique que d'un point de vue juridique. Le côté légal est que les polices sont des logiciels, et doivent donc être sous licence comme tout autre code tiers que vous incluez dans votre programme. Vous voudrez peut-être regarder la famille de police Bitstream Vera, puisqu'ils sont sous licence libérale. La famille est très capable, conçue pour être utilisée comme base de polices sous Linux et autres. Le côté technique est que ces règles sont cuites dans les formats de fichier TTF et OTF, et des outils comme le compilateur Flex obéissent aux restrictions de licence déclarées dans le fichier. Si la police est marquée "no embed", elle ne vous permettra pas de l'intégrer.

+0

Certains programmes utilisent également 'faux gras' et 'faux italique' lorsqu'ils font quelque chose de bizarre à la police pour le faire lire comme s'il était en gras ou en italique - bien qu'il ne soit pas aussi beau que les bonnes versions en gras et en italique la police. – quoo

+0

Merci Warren, Nous examinons la légalité et avons déjà examiné diverses polices Unicode open source. Cependant, le problème est qu'il semble que Flex utilise une police telle qu'Arial Unicode et applique les transformations en gras et en italique pour afficher les caractères gras et italiques. Mais ce n'est que si la police est installée sur le système, et non si elle est intégrée. Ce comportement est ce que j'essaie de déterminer comment répliquer. –

+1

Je pense que vous trouverez que si vous intégrez les quatre variantes de la police, chacune d'un fichier séparé, vous obtiendrez le comportement que vous voulez. Gardez à l'esprit que la vue des polices que vous obtenez à l'intérieur, par exemple, MS Word, est une abstraction de la façon dont les polices fonctionnent réellement. Word dit que vous avez "Arial" installé, et vous permet de le mettre en gras ou en italique, ou les deux. La réalité est qu'il existe un certain nombre de combinaisons de poids et de styles, dont chacun est stocké dans un fichier séparé. L'incorporation de polices Flex est basée sur cette réalité sous-jacente, et non sur l'abstraction que vous voyez normalement dans les applications des utilisateurs finaux. –

Questions connexes