- 平台:
ubuntu
1.部署安装
https://github.com/mapbox/node-fontnik
1.1克隆源代码
git clone https://github.com/mapbox/node-fontnik.git
1.2编译安装
npm install
1.3测试是否成功
npm test
2.源码
2.1转换一个字体的pbf文件
var fontnik = require('.');
var fs = require('fs');
var path = require('path');
var convert = function (fileName, outputDir) {
var font = fs.readFileSync(path.resolve(__dirname + "/" + fileName));
output2pbf(font, 0, 255, outputDir);
}
function output2pbf(font, start, end, outputDir) {
if (start > 65535) {
console.log("done!");
return;
}
fontnik.range({ font: font, start: start, end: end }, function (err, res) {
var outputFilePath = path.resolve(__dirname + "/" + outputDir + start + "-" + end + ".pbf");
fs.writeFile(outputFilePath, res, function (err) {
if (err) {
console.error(err);
} else {
output2pbf(font, end + 1, end + 1 + 255, outputDir);
}
});
});
}
convert("./font/OpenSans-SemiBold.ttf", "./my_pbf/");
注意:
只需更改convert中的两个文件地址即可。
2.2转换为两个字体的合并pbf文件
var fontnik = require('.');
var fs = require('fs');
// 读取第一个 PBF 文件
var pbf1 = fs.readFileSync('./merge_pbf/open.pbf');
// 读取第二个 PBF 文件
var pbf2 = fs.readFileSync('./merge_pbf/1.pbf');
// 将 PBF 缓冲区作为数组传递给 composite 函数
fontnik.composite([pbf1, pbf2], function(err, res) {
if (err) {
console.error(err);
} else {
// 将合成的 PBF 结果写入文件
fs.writeFileSync('./merge_pbf/combined.pbf', res);
console.log('合并完成!');
}
});
2.3另一种写法
https://juejin.cn/post/6867352613961728008#comment
3.执行程序
node js文件
注意:
js文件放在node-fontnik文件夹下
4.注意事项
4.1命名规范
如果你的代码中为"glyphs": "./glyphs/test/{fontstack}/{range}.pbf",
,
则命令需要是范围如0-255.pbf
4.2打印结果
"done!"是当所有的字符范围已经被处理并转换为.pbf格式后打印的信息。它表示整个转换过程已经完成。
在output2pbf函数中,start和end参数定义了要转换的字符范围。如果start值大于65535(这是Unicode字符的最大值),那么函数将打印"done!"并返回,表示转换完成。
然后,这个函数使用fontnik.range将每个字符范围(从start到end)的字体数据转换为.pbf格式。如果这个过程中没有错误,它将继续调用output2pbf函数处理下一个字符范围。
所以,当你看到"done!"时,这表示所有字符范围的字体数据都已经被成功转换为.pbf格式。