iTextSharp将字体样式应用于现有字体

时间:2018-10-28 16:10:53

标签: c# itext font-style

在文档的开头,我创建了一种新字体:

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

在同一文档的中间某处,我想使用具有不同样式的相同字体(字体家族和大小):粗体和斜体。

我可以以某种方式更改 font1 的样式还是必须创建新的字体?

注意:我知道我可以做到:

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

但是两者呢?也许还下划线 ...

1 个答案:

答案 0 :(得分: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常量是

  • “正常”
  • “大胆”
  • “斜体”
  • “斜”
  • “下划线”
  • “直通”