создать подмножество шрифтов с помощью opentype.js, получая ошибку «Ошибка синтаксического анализа OTS: cmap: Failed to parse table» - PullRequest
0 голосов
/ 03 июля 2019

Я пытаюсь создать подмножество шрифтов с 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 голосов
/ 05 июля 2019

В конце концов я обнаружил, что строка, переданная в font.stringToGlyph, содержит повторяющиеся символы. Я должен удалить дубликаты один

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

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