如何引入自定义字体重量?

时间:2014-11-10 07:31:08

标签: c# fonts itextsharp

有没有办法将iTextSharp中的字体权重设置为数字?

现在我可以像这样设置加粗字体:

iTextSharp.text.Font font_main = new iTextSharp.text.Font(someBaseFont, 12, iTextSharp.text.Font.BOLD);

因此,只有一个“大胆”可用。但我想要这样的事情:

font_main.weight = 600;

有可能吗?

1 个答案:

答案 0 :(得分:2)

当您选择字体系列时,例如Arial,您还需要选择一种字体,例如Arial常规(arial.ttf),Arial Bold(arialbd.ttf),Arial Italic(ariali.ttf),Arial Bold-Italic(arialbi.ttf),...

当你在代码片段中切换样式时,iText会切换字体。换句话说:您不使用应用样式的Arial常规,切换到同一系列中的另一种字体:Arial Bold。

字体程序(例如存储在arialbd.tff中的字体程序)包含绘制一系列字形的轮廓(也称为路径)的指令。通过使用填充颜色填充路径来渲染这些字形。了解这一点对于满足您的要求非常重要。

您可以通过更改线宽渲染模式来控制字体的粗体。如果您使用的字体系列没有可用的粗体字体,则此功能特别有用。

iText的Chunk对象有一个名为setTextRenderMode()的方法,在SayPeace示例中进行了演示。请允许我在iTextSharp中显示相应的方法:

Chunk bold = new Chunk("Bold", font);
bold.SetTextRenderMode(
    PdfContentByte.TEXT_RENDER_MODE_FILL_STROKE, 0.5f,
    GrayColor.GRAYBLACK
);

第一种方法告诉Chunk字形应该被填充(像往常一样)和描边(不常见)。笔划的宽度应为0.5个用户单位(更改此选项以获得不同的粗体),最终参数定义文本的颜色。

为了完整起见,还有两个额外的评论

  1. 有一种模仿斜体字体的类似方法:setSkew()方法。使用此方法,您可以引入两个角度。例如setSkew(0, 25)将写入角度为25度的字形,这些字形或多或少与斜体字体中使用的角度相对应。
  2. 在过去(很久以前),一些PDF制作人通过在同一位置一遍又一遍地写同一个角色来模仿大胆。结果,该字符呈现为粗体。这有一些缺点:它没有在ISO标准中记录,所以你不能指望所有的观众都会以同样的方式支持它。从PDF中提取文本时,您将获得相同字符的多个实例。