我试图在节点中使用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编辑器不允许我在代码块中输入汉字);
我发现只有在创建具有非拉丁字符的字形时,才会出现此问题。
答案 0 :(得分:0)
我最终发现传递给font.stringToGlyph
的字符串中有重复的字符。我必须自己删除被切除的那些
function rmDupChar(text) {
return [...new Set(text.split(''))].join('');
}
let subfontGlyph = font.stringToGlyphs(rmDupChar('一大段文字中文字体子集'));