Ciao, probabilmente ho realizzato quello che ti serve: una classe che ti consente di trovare il percorso del file contenente il font, conoscendo il nome e (se lo vuoi) il suo stile:
Il programma carica in una tabella (miaTab) tutti i font trueType disponibili e poi
con l'istruzione miaTab.Find("nome del font") oppure miaTab.Find("nome del font","stile")
tu puoi trovare gli stili disponibili e il percorso.
Con il comando miaTab.List() puoi visualizzare tutti i font presenti nella tabella.
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Text;
using System.IO;
namespace FontApp1
{
class Program
{
static void Main(string[] args)
{
TabellaCaratteri miaTab = new TabellaCaratteri();
Carattere trovato = miaTab.Find("calibri");
if (trovato != null)
{
Console.WriteLine(trovato.Nome);
Console.WriteLine(trovato.Stile);
Console.WriteLine(trovato.Percorso);
}
}
public class Carattere
{
public string Nome { get; set; }
public string Stile { get; set; }
public string Percorso { get; set; }
}
public class TabellaCaratteri
{
List<Carattere> tabella = new List<Carattere>();
public TabellaCaratteri()
{
string[] elencoFont = Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Fonts), "*.ttf");
foreach (string percorsoFont in elencoFont)
{
PrivateFontCollection fontCol = new PrivateFontCollection();
fontCol.AddFontFile(percorsoFont);
string nomeFont = fontCol.Families[0].Name;
string stile = "Regular";
if (fontCol.Families[0].IsStyleAvailable(FontStyle.Bold))
{
stile += ", Grassetto";
}
if (fontCol.Families[0].IsStyleAvailable(FontStyle.Italic))
{
stile += ", Corsivo";
}
if (fontCol.Families[0].IsStyleAvailable(FontStyle.Bold&FontStyle.Italic))
{
stile += ", Grassetto Corsivo";
}
tabella.Add(new Carattere() { Nome = nomeFont, Stile = stile, Percorso = percorsoFont });
}
}
public Carattere Find(string ricerca)
{
return tabella.Find(x => x.Nome.ToLower() == ricerca.ToLower());
}
public Carattere Find(string ricerca, string stile)
{
return tabella.Find(x => x.Nome.ToLower() == ricerca.ToLower() && x.Stile.ToLower().Contains(stile.ToLower()));
}
public void List()
{
foreach (Carattere elemento in tabella)
{
Console.WriteLine("\n"+elemento.Nome);
Console.WriteLine(elemento.Stile);
Console.WriteLine(elemento.Percorso);
}
}
}
}
}