使用pkg打包pdfkit项目后执行exe报错:不支持ascii编码
解决pkg打包pdfkit项目后运行出现ERR_ENCODING_NOT_SUPPORTED错误
这个错误通常是pkg打包时未正确包含静态资源(字体、图片),或是依赖库在打包环境下尝试使用不被支持的ascii编码导致的,以下是具体解决办法:
1. 确保静态资源被正确打包
pkg默认不会自动打包项目中的字体、图片等静态文件,需要手动配置:
- 在项目的
package.json中添加pkg字段,指定需要打包的资源:
{ "pkg": { "assets": [ "path/to/font.ttf", "path/to/image.png" ] } }
或者在打包命令中通过--assets参数指定:
pkg --target node16-win-x64 --assets "path/to/*" -o app.exe
2. 改用二进制流处理,避免隐式编码调用
修改代码,确保文件读写使用二进制模式,绕过默认的ascii编码依赖:
- 调整PDF写入流的编码设置:
doc.pipe(fs.createWriteStream('output.pdf', { encoding: 'binary' }));
- 直接读取字体文件为Buffer后传入pdfkit:
const fontBuffer = fs.readFileSync('path/to/font.ttf'); doc.font(fontBuffer) .fontSize(25) .text('This is a custom font!', 100, 100);
3. 排查依赖兼容性
尝试调整依赖版本适配:
- 升级pdfkit到最新稳定版,注意与Node.js 16的版本兼容
- 更换pkg版本,比如使用
5.7.x版本测试是否与当前Node.js版本更适配
4. 定位具体报错模块
添加异常捕获代码,打印详细堆栈信息,确定触发编码错误的具体模块:
process.on('uncaughtException', (err) => { console.error('错误详情:', err); console.error('堆栈信息:', err.stack); });
重新打包运行后,根据堆栈信息针对性修复对应模块的编码调用问题。
内容的提问来源于stack exchange,提问作者shreya kamoji
相关产品推荐
相关产品推荐

