2009-05-29 8 views
9

En utilisant une certaine police, j'utilise FontLayout de Java pour déterminer sa montée, sa descente et sa direction. (Voir FontLayout Java tutoriel here)Métriques de polices incorrectes/manquantes dans Java?

Dans mon cas particulier, je suis en utilisant Arial Unicode MS, taille de la police 8. En utilisant le code suivant:

Font font = new Font("Arial Unicode MS", 0, 8); 
    TextLayout layout = new TextLayout("Pp", font, 
           new FontRenderContext(null, true, true)); 
    System.out.println("Ascent: "+layout.getAscent()); 
    System.out.println("Descent: "+layout.getDescent()); 
    System.out.println("Leading: "+layout.getLeading()); 

Java me donne les valeurs suivantes:

Ascent: 8.550781 
    Descent: 2.1679688 
    Leading: 0.0 

Jusqu'ici tout va bien. Cependant, si j'utilise la somme de ces valeurs comme interligne pour différentes lignes de texte, cela diffère beaucoup de l'interligne utilisé dans OpenOffice, Microsoft Word, etc.: il est plus petit. En utilisant l'interligne simple par défaut, Word et OO semblent avoir un interligne d'environ 13.7 pt (au lieu de 10.7 pt comme j'ai calculé en utilisant les métriques de polices de Java ci-dessus).

Toute idée

  1. pourquoi est-ce? Est-ce que je peux accéder d'une manière ou d'une autre aux informations de police que Word et OpenOffice semblent accéder qui conduit à cet interlignage différent?

choses que j'ai essayé jusqu'à présent:

  • ajouter tous les glyphes à un vecteur de glyphe avec font.getNumGlyphs() etc. - toujours obtenir les mêmes mesures de police valeurs
  • en utilisant plusieurs lignes comme décrit here - chaque ligne que je reçois a les mêmes mesures de police que celles décrites ci-dessus.
  • utilisant FontMetrics 'des méthodes telles que getLeading()

Répondre

10

Zarkonnen ne mérite pas ses downvotes car il est sur la bonne voie. Beaucoup de polices Java semblent retourner zéro pour leur avance alors qu'elles ne le devraient peut-être pas. Peut-être que c'est à this bug: Je ne sais pas. Il semblerait que ce soit à vous de remettre cet espace.

La hauteur de ligne typographique est généralement définie comme montée + descente + avance. La montée et la descente sont mesurées vers le haut et vers le bas à partir de la ligne de base sur laquelle les personnages sont assis, et le premier est l'espace entre la descente d'une ligne et l'ascension de la ligne en dessous.

alt text

Mais avant est pas fixé. Vous pouvez définir l'interlignage dans la plupart des logiciels de traitement de texte et de typographie. Word appelle cela l'interlignage. La question initiale demande probablement comment Microsoft Word calcule son interligne simple. Microsoft recommendations for OpenType fonts semblent suggérer que les logiciels sur différentes plates-formes le calculent différemment. (Peut-être c'est pourquoi Java renvoie maintenant zéro?Un peu de Googling autour semble indiquer qu'une règle de base pour mener est 120% of ascent+descent for single-line spacing, ou un espacement de point fixe;

dire 2pts menant entre toutes les lignes. En l'absence de toute règle stricte que je puisse trouver, je dirais que cela se résume à la lisibilité du texte que vous présentez, et que vous devriez vous contenter de ce que vous pensez être le mieux.

3

sont-Word et OO, y compris l'espace blanc entre les lignes, alors que Java est pas? Donc, dans Word/OO, votre numéro est Ascent + Descent + Whitespace, alors qu'en Java, vous avez Ascent + Descent?

+0

+1 Ce n'est pas aussi faux qu'il y paraît. – banjollity

Questions connexes