iTextSharp применяет стиль шрифта к существующему шрифту - PullRequest
0 голосов
/ 28 октября 2018

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

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 Ответ

0 голосов
/ 09 ноября 2018

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

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 Константы для доступных стилей

  • "normal"
  • «полужирный»
  • «курсив»
  • «наклонный»
  • «подчеркивание»
  • «прямой переход»
...