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

如何在jsPDF或同类库中使用盲文字体?解决HTML转PDF盲文显示异常

盲文文本转PDF显示异常的解决方法

问题描述

将HTML文件转换为PDF时,盲文文本无法正常显示,取而代之的是显示“((((((((”。尝试通过导入自定义盲文字体到jsPDF的方式解决,但未成功,也试过导入部分Google字体。

尝试过的代码

function generatePDF(){
    var doc = new jsPDF('p', 'pt', 'a4');
    const myFont = './assets/BrailleNormal-lLDX.ttf'; // load the *.ttf font file as binary string

    // add the font to jsPDF
    doc.addFileToVFS("MyFont.ttf", myFont);
    doc.addFont("MyFont.ttf", "MyFont", "normal");
    doc.setFont("MyFont");
    
    doc.html(document.querySelector('#content'), {
      callback: function(pdf){
        console.log(pdf);
        pdf.save('file.pdf');
      }
    })
}

核心问题与修复方案

  • 字体加载逻辑错误:addFileToVFS需要传入字体文件的二进制字符串,而非文件路径,原代码直接传路径导致字体未正确加载。
  • doc.html()字体继承问题:该方法依赖html2canvas渲染,需确保HTML元素已明确指定使用目标盲文字体,否则会 fallback 到默认字体。

修正后的完整代码

async function generatePDF() {
    const doc = new jsPDF('p', 'pt', 'a4');
    
    // 1. 异步加载字体文件的二进制内容
    const fontRes = await fetch('./assets/BrailleNormal-lLDX.ttf');
    const fontBlob = await fontRes.blob();
    const fontBuffer = await fontBlob.arrayBuffer();
    const fontBinaryStr = String.fromCharCode(...new Uint8Array(fontBuffer));
    
    // 2. 注册字体到jsPDF的虚拟文件系统
    doc.addFileToVFS("BrailleNormal.ttf", fontBinaryStr);
    doc.addFont("BrailleNormal.ttf", "BrailleNormal", "normal");
    
    // 3. 给目标HTML元素设置字体
    const content = document.querySelector('#content');
    content.style.fontFamily = 'BrailleNormal, sans-serif';
    
    // 4. 生成并保存PDF
    await doc.html(content, {
        callback: (pdf) => pdf.save('file.pdf'),
        html2canvas: {
            useCORS: true, // 解决跨域资源加载问题
            logging: false
        }
    });
}

额外注意事项

  • 确认盲文字体文件路径正确,服务器可正常访问该文件,避免跨域拦截。
  • 若使用Google字体,需先通过<link>标签在HTML中提前加载,再在jsPDF中注册对应字体名称。
  • 部分盲文字体对字符编码有要求,确保你的盲文文本使用字体支持的编码格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 22:20:43