1

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

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");

但两者怎么样?也许还强调...

4

1 回答 1

2

首先,在

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)which 真正像 setter 一样工作:

font1.SetStyle(0);

也许还强调...

可用样式的String常量是

  • “普通的”
  • “胆大”
  • “斜体”
  • “斜”
  • “强调”
  • “直通”
于 2018-11-09T10:17:59.737 回答