iTextSharp применяет стиль шрифта к существующему шрифту

В начале документа я создал новый шрифт:

BaseFont baseFont = BaseFont.CreateFont(@"C:\Windows\Fonts\Calibri.ttf", "Identity-H", BaseFont.EMBEDDED);
var font1 = new Font(baseFont, 12, Font.NORMAL);

Где-то в середине того же документа я хочу использовать один и тот же шрифт (fontfamily & size) с другим стилем: жирный и курсив.

Могу ли я как-то изменить стиль font1 или мне нужно создать новый шрифт?

Примечание: я знаю, что могу сделать:

font1.SetStyle("bold");
font1.SetStyle("italic");

но как насчет обоих? И, возможно, также подчеркнуть...

1 ответ

Решение

Прежде всего, в

BaseFont baseFont = BaseFont.CreateFont(@"C:\Windows\Fonts\Calibri.ttf", "Identity-H", BaseFont.EMBEDDED);

Вы загружаете файл шрифта для обычного Calibri. Если вы получаете любой Font из этого BaseFont, он использует обычный файл шрифта Calibri, независимо от того, какие атрибуты стиля вы установили. Это, в частности, означает, что

  • "жирный" стиль реализуется путем не только заполнения нормального контура глифа, но и штрихования линии вдоль него (вариант так называемого "жирного шрифта бедняка") и
  • "Курсивный" стиль реализуется путем применения матрицы преобразования, которая немного искажается.

Вы получаете более качественные и полужирные или курсивные вариации, загружая полужирный или курсив Calibri

BaseFont baseFontBold = BaseFont.CreateFont(@"C:\Windows\Fonts\Calibrib.ttf", "Identity-H", BaseFont.EMBEDDED);
BaseFont baseFontItalic = BaseFont.CreateFont(@"C:\Windows\Fonts\Calibrii.ttf", "Identity-H", BaseFont.EMBEDDED);
BaseFont baseFontBoldItalic = BaseFont.CreateFont(@"C:\Windows\Fonts\Calibriz.ttf", "Identity-H", BaseFont.EMBEDDED);

и получение Font со стилем "нормальный" из соответствия BaseFont,


Сказано, теперь на ваш главный вопрос:

Я знаю, что могу сделать:

font1.SetStyle("bold");
font1.SetStyle("italic");

но как насчет обоих? И, возможно, также подчеркнуть...

Для обоих вы можете просто сделать, как вы написали

font1.SetStyle("bold");
font1.SetStyle("italic");

т.е. установка обоих последовательно, потому что SetStyle(String) на самом деле работает больше как AddStyle, В качестве альтернативы, однако, вы также можете сделать

font1.SetStyle("bold italic");

Если вам нужно сбросить набор выбранных стилей до нормального, вы можете использовать SetStyle(int) который действительно работает как сеттер:

font1.SetStyle(0);

И, возможно, также подчеркнуть...

String константы для доступных стилей

  • "нормальный"
  • "смелый"
  • "Наклонный"
  • "Косой"
  • "Подчеркнуть"
  • "Линия, проходящая через"
Другие вопросы по тегам