如何在C#中获取字体文件路径?

时间:2018-10-07 18:34:27

标签: c# fonts filepath

我必须将通过FontDialog选择的字体的路径分配给字符串变量。

我如何完成此任务?

string fontTextPath = fontDialog.Font // and then?

或者还有其他方法吗?

2 个答案:

答案 0 :(得分:0)

假设您使用的是OpenFileDialog,因为提供的代码使用的是名为fontDialog的对象...

using (OpenFileDialog fontDialog = new OpenFileDialog())
{
    DialogResult result = fontDialog.ShowDialog();
    if (result == DialogResult.OK)
    {
        string file = fontDialog.FileName;
    }
}

答案 1 :(得分:0)

您确定ffmpeg需要字体路径而不是字体名称吗? 大多数时候,组件和库都使用字体的名称或它的对象并由其工作。

如果组件需要字体名称或字体对象,则非常简单:

DrawText('Sample Text, fontDialog1.Font);

但是如果您确实需要在FontDialog中获取所选字体的路径,则:

private List<string> GetFilesForFont(string fontName)
{
    var fontNameToFiles = new Dictionary<string, List<string>>();

    foreach (var fontFile in Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.Fonts)))
    {
        var fc = new PrivateFontCollection();

        if (File.Exists(fontFile))
            fc.AddFontFile(fontFile);

        if ((!fc.Families.Any()))
            continue;

        var name = fc.Families[0].Name;

        // If you care about bold, italic, etc, you can filter here.
        if (! fontNameToFiles.TryGetValue(name, out var files))
        {
            files = new List<string>();
            fontNameToFiles[name] = files;
        }

        files.Add(fontFile);
    }

    if (!fontNameToFiles.TryGetValue(fontName, out var result))
        return null;

    return result;
}

并以这种方式使用它:

    if (fontDialog1.ShowDialog() == DialogResult.OK)
    {
        string fontName = fontDialog1.Font.Name;
        var fontFiles = GetFilesForFont(fontName);
    }