Использование шрифтов в системе с iTextSharp

Я хочу использовать iTextSharp для записи некоторого текста. Я использую этот метод:

var font = BaseFont.CreateFont(BaseFont.TIMES_BOLD, BaseFont.WINANSI, BaseFont.EMBEDDED);

Мой вопрос: поддерживает ли iTextSharp все шрифты в каталоге системных шрифтов?

Скажем, у меня есть шрифт под названием "mycoolfont", выбранный пользователем в диалоговом окне выбора шрифтов. Могу ли я создать новый шрифт iTextSharp следующим образом?

var font = BaseFont.CreateFont("mycoolfont", BaseFont.WINANSI, BaseFont.EMBEDDED);
overContent.SetFontAndSize(font, fontSize);

UPDATE:

Я пробовал var font = BaseFont.CreateFont("Verdana", BaseFont.WINANSI, BaseFont.EMBEDDED);, но получил ошибку "Verdana" не распознается itextsharp

Ответ 1

1 вам нужно зарегистрировать шрифт, а затем просто извлечь его из FontFactory (и не создавать его каждый раз):

public static iTextSharp.text.Font GetTahoma()
{
    var fontName = "Tahoma";
    if (!FontFactory.IsRegistered(fontName))
    {
         var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\tahoma.ttf";
         FontFactory.Register(fontPath);
    }
    return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
}

Ответ 2

В итоге я объединил 2 ответа в этот метод:

public static Font GetFont(string fontName, string filename)
{
    if (!FontFactory.IsRegistered(fontName))
    {
        var fontPath = Environment.GetEnvironmentVariable("SystemRoot") + "\\fonts\\" + filename;
        FontFactory.Register(fontPath);
    }
    return FontFactory.GetFont(fontName, BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
}

Что я тогда использую в своем коде так:

writer.DirectContent.SetFontAndSize(GetFont("Franklin Gothic Medium Cond", "FRAMDCN.TTF").BaseFont, 24f);

В Windows вы можете узнать имя файла шрифта из листа свойств шрифта:

введите описание изображения здесь

Я также обнаружил, что вам нужно использовать точное имя шрифта на вкладке "Сведения":

введите описание изображения здесь

Ответ 3

Я отправляю это, так как кто-то может найти это полезным. У меня была аналогичная проблема, когда я запускал свой код на сервере. Причина в том, что itextsharp не смог найти стиль шрифта в ОС. Мой PDF файл показал некоторый случайный стиль шрифта, когда он не смог найти шрифт (ошибка сбрасывания). Я скопировал необходимые файлы шрифтов (.ttf) в папку моего проекта bin и использовал следующий код.

public static BaseFont GetFont(string fontName)
{
    return BaseFont.CreateFont(HttpContext.Current.Server.MapPath("~/Bin/" +   fontName + ".ttf"), BaseFont.CP1252, BaseFont.EMBEDDED);
}

Здесь я получаю нужный шрифт

`BaseFont sm = GetFont("comic"); //The fontName here should exactly match` the` file name in bin folder