Salvare font di sistema in una cartella

di Anonimizzato25887 il
5 risposte
Buongiorno a tutti,
sono nuovo del forum, e vorrei porvi un quesito.
Ho un applicativo che funge da editor di testo legato al db del cliente, da li vengono creati dei pdf con una libreria dedicata e il corrispettivo degli stessi in .jpg.
Avrei però anche la necessità di poter salvare i file relativi ai font utilizzati nella creazione del pdf.
I font utilizzati vengono salvati nel db tramite il nome del font che ricavo da FontDialog, però non trovo da nessuna parte il rispettivo percorso che dovrebbe puntare a C:\Windows\Fonts.
Dovrei solo fare un File.copy ma da dove??
Qualcuno può darmi una mano??

5 Risposte

  • Io non ho capito bene: i nomi dei font utilizzati per il file pdf vengono salvati in una tabella del db del cliente?
  • Scusate la tarda risposta.
    Il cliente ha una tabella in cui ha la lista dei font utilizzati, e in generazione utilizza quella il problema si pone quando il file è generato perchè il pdf viene mandato a una tipografia, che per stamparli se non li ha installati li deve installare.
    La cartella dei font la trovo ed è la cosa più semplice da fare, il difficile è trovare il nome del file che corrisponde al nome del font.
    Alcuni font li trovo come ad esempio Arial corrisponde al file arial.ttf, ma ad esempio già Arial corsivo diventa Ariali.ttf, per non parlare dei vari Microsoft .... , quelli non ne trova neanche uno!
  • 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);
                    }                    
                }
            }
        }
    }
    
    
  • Non so proprio come ringraziarti!!! la provo o meglio scusa il termine cannibalizzo un pochino del tuo codice e poi ti dico.
    Grazie moltissime!!!!!
Devi accedere o registrarti per scrivere nel forum
5 risposte