Загрузите шрифт ttf из файловой системы, не встраивая его в качестве ресурса.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Загрузите шрифт ttf из файловой системы, не встраивая его в качестве ресурса.

Сообщение Anonymous »

У меня есть приложение Windows Forms, и я пытаюсь использовать шрифт из файла. В частности, это шрифт B612, но я не думаю, что это имеет какое-либо значение.
Я попытался загрузить его с помощью метода 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Загрузите шрифт ttf из файловой системы, не встраивая его в качестве ресурса.
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Загрузите шрифт ttf из файловой системы, не встраивая его в качестве ресурса.
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Загрузите шрифт ttf из файловой системы, не встраивая его в качестве ресурса.
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Не удалось загрузить шрифт «ÇYr2╚arail.ttf █ât0╚B╚╚F¬²÷»¯█¨-L¬²» (не удалось создать шрифт)
    Anonymous » » в форуме C++
    0 Ответы
    90 Просмотры
    Последнее сообщение Anonymous
  • Как добавить собственный шрифт TTF в мой проект React Native?
    Anonymous » » в форуме Android
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»