Я попытался загрузить его с помощью метода PrivateFontCollection.AddFontFile(string). Шрифт должен быть загружен правильно, поскольку я не получаю никаких исключений, а также перебираю семейства шрифтов коллекции, и шрифт уже есть. К сожалению, здесь есть проблема: это не работает. Текст отображается с использованием резервного шрифта.
Я даже пытался запустить этот пример от Microsoft. Без установки шрифта:

После установки шрифта:

Обратите внимание, что файлы шрифтов находятся в ожидаемом каталоге. В противном случае программа не запустится.
Вышеупомянутое совершенно бесполезно, поскольку я бы хотел, чтобы пользователи могли переносить свои шрифты непосредственно в каталог, поскольку у них может не быть всех административных прав. установить шрифт. Встраивание шрифта в качестве ресурса также не поможет, поскольку лишает гибкости.
Можно ли загрузить шрифт из файла, не устанавливая его?
Я пробую это на .NET framework 4.8 Windows 10.0.19045
Дополнение
Да, я знаю, что не публиковал никакого кода. Код находится в примере, который я связал. Конечно, в Интернете больше мертвых ссылок, чем живых. Итак, вот слегка измененная версия примера, в котором скриншоты основаны на:
Код: Выделить всё
public partial class Form1 : Form
{
private FontFamily[] fontFamilies;
public Form1()
{
InitializeComponent();
PrivateFontCollection privateFontCollection = new PrivateFontCollection();
string[] ttfFiles = Directory.GetFiles("path to the fonts", "*.ttf");
foreach (string ttfFile in ttfFiles)
{
privateFontCollection.AddFontFile(ttfFile);
}
fontFamilies = privateFontCollection.Families;
Disposed += (_, _) =>
{
Console.WriteLine("Disposing");
privateFontCollection.Dispose();
};
}
protected override void OnPaint(PaintEventArgs e)
{
base.OnPaint(e);
PointF pointF = new PointF(10, 0);
SolidBrush solidBrush = new SolidBrush(Color.Black);
int count = 0;
count = fontFamilies.Length;
for (int j = 0; j < count; ++j)
{
string familyName = fontFamilies[j].Name;
if (fontFamilies[j].IsStyleAvailable(FontStyle.Regular))
{
Font regFont = new Font(
familyName,
16,
FontStyle.Regular,
GraphicsUnit.Pixel);
e.Graphics.DrawString(
$"{familyName} {FontStyle.Regular}",
regFont,
solidBrush,
pointF);
pointF.Y += regFont.Height;
}
//so on and so forth for the rest of the styles
pointF.Y += 10;
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/791 ... a-resource