当前位置: 首页 > 工具软件 > Fontconfig > 使用案例 >

linux下fontConfig配置

齐向笛
2023-12-01
     最近工作中,需要在suse操作系统中添加一种新的中文字体,然后在chromium中传入font family名称,通过skia,再通过fontConfig访问该字库。
     添加字库的步骤大致有:

     (1)将需要增加的字库文件拷贝到~/.fonts/目录下。(注:对~/.fonts/目录的扫描,需要预先在/usr/loca/etc/font/font.conf里面配置)

     (2)/usr/loca/etc/font/font.conf配置的30s会扫描一次字库文件,这个一般是默认配置。

     (3)使用 fc-list命令查看fontConfig当前检测到的字库,一般打印如下:

NSimSun,新宋体:style=Regular
FZHeiTi,方正黑体:style=Regular
FZFangSong,方正仿宋:style=Regular
MicroHei,文泉驿微米黑(完整版)_by_zxl1103:style=Regular
SimSun,宋体:style=Regular
AR PL SungtiL GB,文鼎PL简报宋:style=Regular
FZKaiTi,方正楷体:style=Regular
AR PL ZenKai Uni,文鼎PL中楷Uni:style=Medium
FZSongTi,方正宋体:style=Regular
AR PL ShanHeiSun Uni,文鼎PL細上海宋Uni,文鼎PL细上海宋Uni:style=Regular
AR PL KaitiM GB,文鼎PL简中楷:style=Regular

       其中MicroHei是我们需要添加的字库,看来是fontConfig扫描到了。

      (4)使用  fc-match -v MicroHei 命令可查看MicroHei的详细信息。比较有用的数据有:

Pattern has 30 elts (size 32)
        family: "MicroHei"(s)
        familylang: "en"(s)
        style: "Regular"(s)
        stylelang: "en"(s)
        fullname: "Droid Sans"(s)
        fullnamelang: "en"(s)
        slant: 0(i)(s)
        weight: 80(i)(s)
        width: 100(i)(s)
        size: 12(f)(s)
        pixelsize: 12.5(f)(s)
        foundry: "unknown"(s)
        antialias: FcTrue(s)
        hintstyle: 3(i)(s)
        hinting: FcTrue(s)
        verticallayout: FcFalse(s)
        autohint: FcFalse(w)
        globaladvance: FcTrue(s)
        file: "/usr/local/app/.fonts/MicroHei.ttf"(s)
        index: 0(i)(s)
        outline: FcTrue(s)
        scalable: FcTrue(s)
        dpi: 75(f)(s)
        scale: 1(f)(s)

       其中file和family可以确定该字库是不是你添加的字库。

     (5)修改 /usr/local/etc/fonts/suse-post-user.conf文件,
对应的alias/family/prefer配置,serif,sans-serif及monospace三个family建议都修改。
由于suse中默认的中文使用FZSongTi,可以将MicroHei添加到FZSongTi的配置之前。prefer数组配置的主要意义是确认fontConfig以family name搜索字库时的先后顺序。
     如果prefer数组中没有添加MicroHei字段,fontConfig就不会搜索MicroHei字库了。
  
     (6)使用  fc-cache -f 命令强制更新fontConfig服务。使之前加入的配置立即生效。

     (7)使用模拟器访问页面,触发服务器上的Chrome服务加载新字库。使用  lsof | grep "XXXX" 查看进程资源引用情况。其中XXXX是你的Chrome进程端口号,如果有以下信息:
 
      Chrome 14169        mqq  mem       REG                8,3     9152   1920703 /usr/local/app/.fontconfig/8f60ca31bea1e8f374144819c091a766-x86-64.cache-2
Chrome 14169        mqq  mem       REG                8,3    33448   1920700 /usr/local/app/.fontconfig/7ef2298fde41cc6eeb7af42e48b7d293-x86-64.cache-2
Chrome 14169        mqq  mem       REG                8,3  6193796   1430046 /usr/local/app/.fonts/MicroHei.ttf

      说明字库已经被Chrome服务成功加载了。
      注:如果需要在Chrome服务中指定font family,需要修改服务的配置文件,添加
以下字段(默认不配置时,FontFamily值为"simsun"):
      #font_family
      FontFamily="MicroHei"

      (8)新的MicroHei字库与系统默认的FZSongTi对英文的显示有明显区别,MicroHei是非等宽字符集,FZSongTi是等宽字符集。可通过模拟器,显示英文字符网页或查看下发的文件中字符串的宽度对比,确认最终字库更换是否生效。
     
 类似资料: