2009-09-17 13 views
20

Ho un font di terze parti con supporto per caratteri giapponesi che devo usare per un'applicazione. Ogni volta che un carattere non è supportato da questo carattere, viene disegnato il rettangolo spesso visto ("carattere predefinito"). Ovviamente non tutti i caratteri giapponesi sono supportati, perché se provo a disegnare le traduzioni che il nostro ufficio di traduzione ci ha dato, ci sono molti rettangoli.Ottenere caratteri supportati di un carattere - in C#

Devo ricevere una notifica ogni volta che viene utilizzato un carattere non supportato, in modo da poter modificare il carattere per questo singolo carattere (come Word) o implementare qualche altra reazione a questo.

Qualche idea? Se potessi estrarre un elenco di caratteri Unicode dal file TTF, allora sarei in grado di verificare se un personaggio usato è coperto da questo elenco. Ma come posso farlo?

+0

Sono esattamente di fronte allo stesso problema. Devo escludere questi caratteri di tipo rettangolo da diversi tipi di carattere di terze parti. Qualcuno può dare qualche soluzione ... – Mohsan

risposta

-2

Non puoi semplicemente selezionarlo in Mappa caratteri e prendere nota degli intervalli di caratteri che non sono definiti?

Probabilmente c'è un modo programmatico per analizzare un file TTF per queste informazioni, ma se è solo un font particolare, probabilmente è più semplice aprire la Mappa caratteri, impostare il gruppo su Unicode Subrange e Raggruppa di "Japanese Hiragana/Katakana" e prendi nota degli intervalli definiti.

22

Basato su this answer.

sicuro riferire PresentationCore.dll

Prova utilizzando questo codice: immagine

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)); 
        } 

       } 
      } 
     } 
    } 
} 

uscita rimosso a causa di ImageShack sostituire vecchia immagine, cancellato con una pubblicità.

+0

C'è un modo per farlo con UWP? Devo eseguire un'attività correlata in un'app UWP. – erickfiveten

Problemi correlati