2009-05-29 11 views
9

Korzystając z pewnej czcionki, używam czcionki FontLayout języka Java, aby określić jej wznoszenie, zniżanie i prowadzenie. (Patrz poradnik FontLayout Javy here)Niepoprawne/brakujące dane czcionki w języku Java?

W moim konkretnym przypadku używam Arial Unicode MS, rozmiar czcionki 8. Za pomocą następującego kodu:

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 daje mi następujące wartości:

Ascent: 8.550781 
    Descent: 2.1679688 
    Leading: 0.0 

Jak dotąd tak dobrze. Jednak jeśli użyję sumy tych wartości jako moich odstępów między wierszami dla różnych linii tekstu, różni się to nieco od odstępów między wierszami używanymi w OpenOffice, Microsoft Word, itd .: jest mniejsze. Podczas korzystania z domyślnego odstępu między wierszami Word i OO wydają się mieć odstęp między wierszami wynoszący około 13,7 pt (zamiast z 10.7 pt podobnie jak obliczałem dane Javy powyżej).

Każdy pomysł

  1. , dlaczego tak jest?
  2. czy mogę w jakiś sposób uzyskać dostęp do informacji o czcionce Word i OpenOffice wydają się uzyskiwać dostęp, co prowadzi do różnych odstępów między wierszami?

Czego próbowałem dotąd:

  • dodając wszystkie glify do wektora glifów z font.getNumGlyphs() itd - wciąż te same wartości parametrów czcionki
  • użyciu wielu linii zgodnie z opisem here - każda linia, którą otrzymuję, ma te same metryki czcionek, co opisane powyżej.
  • wykorzystujące FontMetrics 'metody, takie jak getLeading()

Odpowiedz

10

Zarkonnen nie zasługuje na nic, jak na właściwe linie. Wiele czcionek Java wydaje się zwracać zero dla ich wiodących, kiedy być może nie powinny. Może to zależy od this bug: Nie wiem. Wygląda na to, że spasujesz to białe spacje.

Wysokość linii typograficznej jest zwykle definiowana jako wejście + zniżanie + prowadzenie. Wznoszenie i zniżanie są mierzone w górę iw dół od linii bazowej, na której znajdują się postacie, a prowadzący to przestrzeń między zejściem jednej linii a wejściem pod linię.

alt text

Ale wiodący nie jest ustalona. Możesz ustawić prowadzenie w większości edytorów tekstu i oprogramowania do pisania. Słowo nazywa to odstępem między wierszami. Oryginalnym pytaniem jest prawdopodobnie pytanie, w jaki sposób program Microsoft Word oblicza pojedynczy odstęp między wierszami. Wydaje się, że Microsoft recommendations for OpenType fonts sugeruje, że oprogramowanie na różnych platformach oblicza je inaczej. (Być może właśnie dlatego Java zwraca teraz zero?)

Szybkie wyszukiwanie Googling wydaje się wskazywać, że reguła wiodąca to 120% of ascent+descent for single-line spacing lub stały odstęp punktowy; powiedz 2 punkty wiodące między wszystkimi liniami. Wobec braku jakiejkolwiek twardej lub szybkiej reguły, powiedziałbym, że sprowadza się ona do czytelności tekstu, który prezentujesz, i powinieneś po prostu wybrać to, co uważasz za najlepsze.

3

Are Word i OO włącznie z białą przestrzeń między liniami, natomiast Java nie?

Tak więc w Word/OO Twoja liczba to Ascent + Descent + Whitespace, podczas gdy w Javie masz tylko Ascent + Descent?

+0

+1 To nie jest tak źle, jak się wydaje. – banjollity