iTextSharp 将字体样式应用于现有字体
iTextSharp apply font style to existing font
在文档的开头我创建了一个新字体:
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");
但是两者都怎么样?也许还有 下划线...
首先,在
BaseFont baseFont = BaseFont.CreateFont(@"C:\Windows\Fonts\Calibri.ttf", "Identity-H", BaseFont.EMBEDDED);
您加载常规 Calibri 的字体文件。如果您从这个 BaseFont
派生任何 Font
,它使用常规的 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);
并从匹配的 BaseFont
.
中导出样式为“normal”的 Font
话虽如此,现在回答您的主要问题:
I know I can do:
font1.SetStyle("bold");
font1.SetStyle("italic");
but how about both? And maybe also underline...
对于两个你可以简单地按照你写的去做
font1.SetStyle("bold");
font1.SetStyle("italic");
即按顺序设置两者,因为 SetStyle(String)
实际上更像 AddStyle
。不过,您也可以选择
font1.SetStyle("bold italic");
如果您需要将所选样式集重置为正常,您可以使用 SetStyle(int)
,它确实像 setter 应该:
font1.SetStyle(0);
And maybe also underline...
可用样式的String
常量是
- “正常”
- “粗体”
- “斜体”
- “斜”
- “下划线”
- “直通”
在文档的开头我创建了一个新字体:
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");
但是两者都怎么样?也许还有 下划线...
首先,在
BaseFont baseFont = BaseFont.CreateFont(@"C:\Windows\Fonts\Calibri.ttf", "Identity-H", BaseFont.EMBEDDED);
您加载常规 Calibri 的字体文件。如果您从这个 BaseFont
派生任何 Font
,它使用常规的 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);
并从匹配的 BaseFont
.
Font
话虽如此,现在回答您的主要问题:
I know I can do:
font1.SetStyle("bold"); font1.SetStyle("italic");
but how about both? And maybe also underline...
对于两个你可以简单地按照你写的去做
font1.SetStyle("bold");
font1.SetStyle("italic");
即按顺序设置两者,因为 SetStyle(String)
实际上更像 AddStyle
。不过,您也可以选择
font1.SetStyle("bold italic");
如果您需要将所选样式集重置为正常,您可以使用 SetStyle(int)
,它确实像 setter 应该:
font1.SetStyle(0);
And maybe also underline...
可用样式的String
常量是
- “正常”
- “粗体”
- “斜体”
- “斜”
- “下划线”
- “直通”