Использование шрифтов в системе с 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