【问题标题】:iTextSharp apply font style to existing fontiTextSharp 将字体样式应用于现有字体
【发布时间】:2018-10-28 16:10:52
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# itext font-style


    【解决方案1】:

    首先,在

    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


    说了这么多,现在来回答你的主要问题:

    我知道我能做到:

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

    但是两者呢?并且也许还强调...

    对于两者你可以简单地按照你写的去做

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

    即按顺序设置两者,因为SetStyle(String) 实际上更像AddStyle。或者,你也可以这样做

    font1.SetStyle("bold italic");
    

    如果您需要将所选样式集重置为正常,您可以使用SetStyle(int),它确实像 setter 一样工作:

    font1.SetStyle(0);
    

    也许还要加下划线...

    可用样式的String 常量是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      相关资源
      最近更新 更多