2009-09-17 6 views
20

Ich habe eine Third-Party-Schriftart mit Unterstützung für japanische Zeichen, die ich für eine Anwendung verwenden muss. Immer wenn ein Zeichen von dieser Schriftart nicht unterstützt wird, wird das häufig anzutreffende Rechteck ("Standardzeichen") gezeichnet. Natürlich werden nicht alle japanischen Schriftzeichen unterstützt, denn wenn ich versuche, die Übersetzungen zu zeichnen, die unser Übersetzungsbüro uns gegeben hat, gibt es viele Rechtecke.Erhalten Sie unterstützte Zeichen einer Schriftart - in C#

Ich muss benachrichtigt werden, wenn ein nicht unterstütztes Zeichen verwendet wird, so dass ich die Schriftart für dieses einzelne Zeichen ändern kann (wie Word es tut) oder eine andere Reaktion darauf implementieren.

Irgendwelche Ideen? Wenn ich eine Liste von Unicode-Zeichen aus der TTF-Datei extrahieren könnte, wäre ich in der Lage zu überprüfen, ob ein benutztes Zeichen von dieser Liste abgedeckt wird. Aber wie kann ich das tun?

+0

Ich bin genau mit dem gleichen Problem konfrontiert. Ich muss diese rechteckigen Zeichen aus verschiedenen Drittanbieter-Schriftarten ausschließen. jemand bitte geben Sie irgendeine Lösung .... – Mohsan

Antwort

-2

Können Sie es nicht einfach in die Zeichentabelle ziehen und die Zeichenbereiche notieren, die nicht definiert sind?

Es gibt wahrscheinlich einen programmatischen Weg, um eine TTF-Datei für diese Informationen zu analysieren, aber wenn es nur eine bestimmte Schriftart ist, dann ist es wahrscheinlich einfacher, die Zeichentabelle zu öffnen, die Gruppierung auf Unicode-Unterbereich und Gruppe von "Japanese Hiragana/Katakana" einzustellen und notiere einfach die definierten Bereiche.

22

Basiert auf this answer.

Seien Sie sicher, PresentationCore.dll

Versuchen Sie sich mit diesem Code verweisen:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Windows.Media; 

namespace fontChecker 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var families = Fonts.GetFontFamilies(@"C:\WINDOWS\Fonts\Arial.TTF"); 
      foreach (FontFamily family in families) 
      { 
       var typefaces = family.GetTypefaces(); 
       foreach (Typeface typeface in typefaces) 
       { 
        GlyphTypeface glyph; 
        typeface.TryGetGlyphTypeface(out glyph); 
        IDictionary<int, ushort> characterMap = glyph.CharacterToGlyphMap; 

        foreach (KeyValuePair<int, ushort> kvp in characterMap) 
        { 
         Console.WriteLine(String.Format("{0}:{1}", kvp.Key, kvp.Value)); 
        } 

       } 
      } 
     } 
    } 
} 

Ausgabebild entfernt aufgrund Images Ersatz alten, gelöschte Bildes mit einer Anzeige.

+0

Gibt es eine Möglichkeit, dies mit UWP zu tun? Ich muss eine verwandte Aufgabe in einer UWP-App erledigen. – erickfiveten

Verwandte Themen