繁体   English   中英

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

[英]How to obtain a font file path in c#?

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

如何完成这项任务?

string fontTextPath = fontDialog.Font // and then?

还是有其他方法?

您确定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);
    }

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM