Salvare font di sistema in una cartella

di il
5 risposte

Salvare font di sistema in una cartella

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

  • Re: Salvare font di sistema in una cartella

    Io non ho capito bene: i nomi dei font utilizzati per il file pdf vengono salvati in una tabella del db del cliente?
  • Re: Salvare font di sistema in una cartella

    Salve,
    non capisco bene l'esigenza, anche perche' in caso, i font andrebbero poi "installati" (vedi ad esempio https://stackoverflow.com/questions/21986744/how-to-install-a-font-programmatically-c)...
    comunque, https://stackoverflow.com/questions/7407702/how-to-get-the-path-to-the-windows-fonts-folder
    saluti
    --
    Andrea
  • Re: Salvare font di sistema in una cartella

    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!
  • Re: Salvare font di sistema in una cartella

    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);
                    }                    
                }
            }
        }
    }
    
    
  • Re: Salvare font di sistema in una cartella

    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