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
константы для доступных стилей
- "нормальный"
- "смелый"
- "Наклонный"
- "Косой"
- "Подчеркнуть"
- "Линия, проходящая через"