You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node环境下jsPDF输出葡萄牙语重音字符乱码问题求助

Node环境下jsPDF葡萄牙语重音字符乱码解决办法

问题现象

本地Node环境运行jsPDF官方示例代码时,葡萄牙语重音字符(áéíóçã等)显示为乱码(如áéÃ-óç),但官方在线预览正常。

问题原因

jsPDF默认内置的字体(如Helvetica、Courier)仅支持基础ASCII字符,不包含葡萄牙语所需的扩展Unicode字符;本地Node环境未加载支持Unicode的字体,导致字符编码解析错误。

解决步骤

  1. 准备支持Unicode的字体文件
    选择支持葡萄牙语重音的字体,如Roboto、Arial Unicode MS,将字体文件(如Roboto-Regular.ttf)放在项目目录中。

  2. 升级jsPDF到最新版本
    旧版本可能存在编码兼容问题,执行命令升级:

    npm install jspdf@latest
    
  3. 加载字体并使用
    通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:45:09