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

使用jsPDF doc.html时如何实现多字体(含自定义字体)生效?

解决方案:实现英文用Helvetica、其他语言用自定义字体的PDF渲染

完全可行,核心是解决jsPDF渲染时的字体回退识别问题,以下是具体步骤:

  • 正确注册自定义字体到jsPDF
    在调用doc.html()之前,必须确保自定义字体已被jsPDF识别,使用addFont()方法完成注册:

    const doc = new jsPDF();
    // 注册自定义字体,参数依次为字体文件路径、字体名、样式
    doc.addFont('myFont.ttf', 'myFont', 'normal');
    
  • 用CSS unicode-range划分字体负责范围
    问题根源是渲染引擎优先匹配系统字体Helvetica后,不会再触发自定义字体的加载。通过unicode-range明确指定两种字体的字符覆盖范围,让渲染引擎精准匹配:

    /* 目标容器的字体回退规则 */
    #to-pdf {
      font-family: Helvetica, myFont;
    }
    
    /* 限制Helvetica仅处理英文等ASCII字符 */
    @font-face {
      font-family: 'Helvetica';
      src: local('Helvetica');
      unicode-range: U+0000-007F; /* 覆盖基本ASCII字符集 */
    }
    
    /* 指定自定义字体处理非ASCII的其他语言字符 */
    @font-face {
      font-family: 'myFont';
      src: url('myFont.ttf') format('truetype');
      unicode-range: U+0080-FFFF; /* 覆盖所有非ASCII字符 */
    }
    
  • 预加载自定义字体再渲染PDF
    部分场景下,浏览器可能未完成自定义字体加载就触发PDF渲染,导致字体不生效。可以通过FontFace API预加载字体后再执行渲染:

    // 预加载自定义字体
    const customFont = new FontFace('myFont', 'url(myFont.ttf)');
    customFont.load().then(() => {
      document.fonts.add(customFont);
      // 字体加载完成后生成PDF
      const doc = new jsPDF();
      doc.html(document.getElementById('to-pdf'), {
        callback: (pdf) => {
          pdf.save('result.pdf');
        }
      });
    });
    
  • 检查html2canvas配置(若使用)
    如果jsPDF依赖html2canvas渲染HTML,确保配置开启字体支持:

    doc.html(document.getElementById('to-pdf'), {
      html2canvas: {
        useCORS: true,
        allowTaint: true
      },
      callback: (pdf) => pdf.save('result.pdf')
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 08:25:47