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

使用jsPDF生成PDF时希伯来语等非英语文本显示乱码如何解决

问题现象

使用jsPDF生成PDF时,英文文本渲染完全正常,传入希伯来语文本时会输出与原内容无关的乱码:输入希伯来语单词עברית,最终PDF中实际显示为âÑèÙê。检索相关资料发现多类非英语语种使用jsPDF时都存在同类问题,初步推测问题与cp1255到UTF-8的编码转换相关,但未找到可落地的解决方案。

问题复现代码:

const word= 'עברית'; // 测试用希伯来语单词
    
const generatePDF = () => {
    const pdf = new jsPDF('example', 'px', 'a4', 'false');
    pdf.text(60, 60, word);
    pdf.save('example.pdf'); // 输出乱码âÑèÙê而非正常的עברית
};
generatePDF();
问题根因

jsPDF默认加载的内置字体均为西文字体,仅支持拉丁字符集,本身没有希伯来语对应的字形映射表,默认采用的单字节编码规则无法正确解析UTF-8编码的希伯来语多字节字符,直接传入希伯来语文本时会被错误拆分为单字节西文字符解析,最终输出乱码。此前猜测的cp1255与UTF-8编码转换方向不成立,编码转换无法解决字体本身缺失对应字形的核心问题。

解决步骤
  • 准备支持希伯来语字形的TTF格式字体文件,优先选择开源可商用的希伯来语字体,避免字体版权问题。
  • 将准备好的TTF字体转换为jsPDF兼容的格式,通过jsPDF官方字体转换工具生成可直接引入的JS格式字体文件,转换时确保字符集覆盖希伯来语Unicode区间。
  • 在业务代码中引入转换完成的字体文件,生成PDF时先注册并切换到自定义的希伯来语支持字体,再执行文本写入操作。由于希伯来语是从右到左书写的RTL语言,写入文本时需要额外开启RTL适配,避免字符顺序颠倒。

修正后的可运行代码示例:

// 引入提前转换好的希伯来语支持字体文件
import './NotoSansHebrew-normal.js';

const word= 'עברית';
    
const generatePDF = () => {
    const pdf = new jsPDF('p', 'px', 'a4');
    // 切换到已加载的希伯来语支持字体
    pdf.setFont('NotoSansHebrew');
    // 写入文本时开启RTL适配,保证希伯来语字符顺序正确
    pdf.text(60, 60, word, { rtl: true });
    pdf.save('example.pdf');
};
generatePDF();

内容的提问来源于stack exchange,提问作者rozina

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:06:23