【问题标题】:How to introduce a custom font weight?如何引入自定义字体粗细?
【发布时间】:2014-11-10 07:31:07
【问题描述】:

有没有办法将 iTextSharp 中的字体粗细设置为数字?

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

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

因此,只有一种“大胆”可用。但我想要这样的东西:

font_main.weight = 600;

有可能吗?

【问题讨论】:

    标签: c# fonts itextsharp


    【解决方案1】:

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

    当您以您在代码 sn-p 中的方式切换样式时,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 中提取文本时,您会获得相同字符的多个实例。

    【讨论】:

    • 这么详细的答案。非常感谢,这有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-05
    • 2021-07-06
    • 2021-08-06
    • 1970-01-01
    • 2017-04-05
    • 2017-01-20
    • 2017-04-30
    相关资源
    最近更新 更多