使用opentype.js创建字体子集,并收到“ OTS解析错误:cmap:无法解析表”错误

时间:2019-07-03 09:22:42

标签: node.js fonts opentype

我试图在节点中使用opentype.js创建字体子集

我的代码

const fs = require('fs');
const opentype = require('opentype.js');

let font = opentype.loadSync('./SourceHanSansCN-Heavy.otf');
let subfontGlyph = font.stringToGlyphs('一大段文字中文字体子集');

let subfont = new opentype.Font({
  familyName: 'SourceHanSansCN-Heavy',
  styleName: 'Heavy',
  unitsPerEm: font.unitsPerEm,
  ascender: font.ascender,
  descender: font.descender,
  glyphs: subfontGlyph
});


fs.writeFileSync('./sub.otf', Buffer.from(subfont.toArrayBuffer()));

然后我尝试在浏览器中使用sub.otf

但是chrome正在抱怨字体文件

OTS parsing error: cmap: Failed to parse table

(StackOverflow编辑器不允许我在代码块中输入汉字);

我发现只有在创建具有非拉丁字符的字形时,才会出现此问题。

1 个答案:

答案 0 :(得分:0)

我最终发现传递给font.stringToGlyph的字符串中有重复的字符。我必须自己删除被切除的那些

function rmDupChar(text) {
  return [...new Set(text.split(''))].join('');
}

let subfontGlyph = font.stringToGlyphs(rmDupChar('一大段文字中文字体子集'));