Node环境下jsPDF输出葡萄牙语重音字符乱码问题求助
Node环境下jsPDF葡萄牙语重音字符乱码解决办法
问题现象
本地Node环境运行jsPDF官方示例代码时,葡萄牙语重音字符(áéíóçã等)显示为乱码(如áéÃ-óç),但官方在线预览正常。
问题原因
jsPDF默认内置的字体(如Helvetica、Courier)仅支持基础ASCII字符,不包含葡萄牙语所需的扩展Unicode字符;本地Node环境未加载支持Unicode的字体,导致字符编码解析错误。
解决步骤
准备支持Unicode的字体文件
选择支持葡萄牙语重音的字体,如Roboto、Arial Unicode MS,将字体文件(如Roboto-Regular.ttf)放在项目目录中。升级jsPDF到最新版本
旧版本可能存在编码兼容问题,执行命令升级:npm install jspdf@latest加载字体并使用
通过Node的fs模块读取字体文件转为Base64,再用addFont方法添加到jsPDF实例中,之后设置字体并输出文本:const jsPDF = require('jspdf'); const fs = require('fs'); const path = require('path'); // 读取字体文件为Base64格式 const fontBase64 = fs.readFileSync(path.join(__dirname, 'Roboto-Regular.ttf'), 'base64'); const doc = new jsPDF(); // 添加字体,指定名称、样式和编码 doc.addFont(fontBase64, 'Roboto', 'normal'); doc.addFont(fontBase64, 'Roboto', 'italic'); // 使用Roboto字体输出文本 doc.setFont('Roboto', 'normal'); doc.text("This is the default font. Accents: áéíóç", 20, 20); doc.setFont('Roboto', 'normal'); doc.text("This is Roboto normal. Accents: áéíóç", 20, 30); doc.setFont('Roboto', 'italic'); doc.text("Teste de acentuação. Accents: áéíóç", 20, 40); // 保存PDF doc.save('portuguese-accent-test.pdf');
补充说明
官方在线预览正常是因为其环境已预加载了支持Unicode的字体,而本地Node环境默认未配置这类字体,因此需要手动添加。
内容的提问来源于stack exchange,提问作者Ronnei Peterson
相关产品推荐
相关产品推荐

