2010-03-23 4 views

Répondre

1

Voici ce que j'ai utilisé dans le passé, c'était pour l'application web donc probablement pas exactement ce que vous voulez. Le fichier Font ttf était également stocké dans une base de données. Vous devrez remplacer [FONTASBYTEARRAY] par un octet réel [].

Il y a probablement une bien meilleure façon d'obtenir le fichier ttf dans l'objet police, mais cela devrait vous aider à démarrer.

using System; 
using System.Drawing; 
using System.Drawing.Imaging; 
using System.Drawing.Text; 
using System.Runtime.InteropServices; 

namespace Utility 
{ 
    public class Font 
    { 
     public string GetFont(byte[] [FONTASBYTEARRAY]) 
     { 
      PrivateFontCollection fc = new PrivateFontCollection(); 
      IntPtr pointer = Marshal.UnsafeAddrOfPinnedArrayElement([FONTASBYTEARRAY], 0); 
      fc.AddMemoryFont(pointer, Convert.ToInt32([FONTASBYTEARRAY].Length)); 
      System.Drawing.Font f = new System.Drawing.Font(fc.Families[0], 10); 
      FontFamily ff = f.FontFamily; 
      return ff.Name; 
     } 
    } 
} 
2

Ceci est le plus facile à faire en important l'espace de noms System.Windows.Media, ce qui vous donne plus de travailler avec et une API plus simple que d'obtenir la police d'un ByteArray

using System.Windows.Media; 

String fontFilePath = "PATH TO YOUR FONT"; 
GlyphTypeface glyphTypeface = new GlyphTypeface(fontFileURI); 
String fontFamily = glyphTypeface.Win32FamilyNames[new System.Globalization.CultureInfo("en-us")]; 
String fontFace = glyphTypeface.Win32FaceNames[new System.Globalization.CultureInfo("en-us")]; 

Console.WriteLine("Font: " + fontFamily + " " + fontFace); 
+0

Vous pouvez trouver de nombreux exemples se tournent vers le registre pour le faire, mais votre solution est la plus propre. Bien. Merci beaucoup, vraiment utile. – Fabio

Questions connexes