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

jsPDF fromHTML插件与自定义字体插件兼容问题求助

解决jsPDF fromHTML与自定义字体插件兼容问题

我之前也碰到过这个坑!问题出在fromHTML插件的字体处理逻辑上——它并不会自动继承你全局设置的自定义字体,哪怕你提前调用了setFont(),它在解析HTML内容时还是会默认 fallback 到标准字体。不过有几个办法可以解决这个问题:

方法一:直接在HTML元素中指定字体样式

最简单的方式是给要转换的HTML内容直接设置字体,让fromHTML解析时能识别并使用你的自定义字体:

<div id="pdf" style="font-family: CustomFont;">
  <!-- 这里放你要转换为PDF的内容 -->
</div>

只要你已经正确加载了自定义字体(addFileToVFS和addFont步骤没问题),这个方法基本能解决大部分场景的问题。

方法二:通过elementHandlers强制设置字体

如果不想修改HTML结构,可以在fromHTML的配置中,用elementHandlers给目标元素强制设置字体:

var pdf = new jsPDF('p', 'pt', 'letter'); 
pdf.addFileToVFS('CustomFont.tff', 'base64 of .tff file'); 
pdf.addFont('CustomFont.tff', 'CustomFont', 'normal'); 

var source = $('#pdf')[0]; 
var margins = { top: 50, bottom: 60, left: 40, width: 520 }; 

// 自定义元素处理器,处理目标容器时设置字体
var specialElementHandlers = {
  '#pdf': function(element, renderer) {
    // 在渲染该元素前切换到自定义字体
    pdf.setFont('CustomFont');
    return true; // 允许renderer继续处理子元素
  }
};

pdf.fromHTML( 
  source, 
  margins.left, 
  margins.top, 
  { 
    'width': margins.width, 
    'elementHandlers': specialElementHandlers,
    // 部分fromHTML版本支持直接配置全局字体
    'font': 'CustomFont' 
  }, 
  function (dispose) { 
    pdf.save('Test.pdf'); 
  }, 
  margins
);

这个方法的核心是在渲染目标HTML元素前,手动切换到自定义字体,确保后续子元素都使用该字体。

额外注意事项

  • 确认字体的Base64编码没有错误:可以用在线工具验证一下编码后的内容是否能正常还原为字体文件。
  • 字体名称要完全一致:addFont的第二个参数(字体名)必须和你在setFont、CSS中使用的名称完全匹配,大小写也要注意。
  • 升级插件版本:如果用的是较旧的jsPDF或fromHTML插件,尝试升级到最新稳定版,新版本对自定义字体的兼容性更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:23:55