跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

jsPDF 中文显示解决方案:字体引入与配置指南

jsPDF 默认不支持中文字符,需引入自定义 TTF 字体。核心方案是使用思源黑体等开源字体,通过官方 fontconverter 工具将 TTF 转为 JS 格式,并在代码中调用 addFont 和 setFont 方法加载。步骤涵盖准备字体、转换格式、引入使用。常见问题包括乱码、文件名不匹配及文件体积大,可通过子集裁剪优化。该流程可实现 PDF 生成中的中文完美显示。

嘘发布于 2026/3/30更新于 2026/7/2660 浏览

jsPDF 中文显示解决方案:字体引入与配置指南

jsPDF 默认只支持 14 种标准 PDF 字体(Helvetica、Times 等),完全不支持中文字符,导致中文显示为方框或乱码。 核心解决办法:引入支持中文的自定义字体(TTF → 转换 → 加载)。

2025-2026 年最推荐、最稳定的方式是使用思源黑体 / 思源宋体 / Noto Sans CJK 等免费开源字体,并通过官方推荐的转换工具处理。

步骤 1:准备中文字体文件(.ttf)

选择体积适中、支持简体中文的字体(推荐以下任一):

  • 思源黑体(Source Han Sans):现代感强,推荐
    • 下载地址:https://github.com/adobe-fonts/source-han-sans(选择 OTC 或 TTF 版本,建议 SC 简体中文子集)
  • 思源宋体(Source Han Serif):更正式的场景
  • Noto Sans CJK SC:Google 出品,覆盖全面
    • https://fonts.google.com/noto/specimen/Noto+Sans+SC
  • 更小的子集字体(推荐生产环境):使用工具裁剪只保留常用汉字,文件可从几 MB 降到几百 KB

小技巧:字体文件越小,PDF 生成越快、文件体积越小。优先找'简体中文子集'版本。

步骤 2:将 TTF 转换为 jsPDF 可用的 JS 格式

jsPDF 官方提供了字体转换工具(fontconverter),将 TTF 转为 base64 + 字体定义的 JS 文件。

操作方式(最简单两种,任选其一):

方式 A:在线转换(推荐新手)

  1. 打开 jsPDF 官方在线转换器(或 fork 版本):
    • https://rawgit.com/MrRio/jsPDF/master/fontconverter/fontconverter.html
    • 或 https://peckconsulting.s3.amazonaws.com/fontconverter/fontconverter.html
  2. 拖入或选择你的 .ttf 文件(例如:SourceHanSansCN-Normal.ttf)
  3. 自动填充:
    • Font name:自定义(如 'SourceHanSansCN')
    • Font style:normal(或 bold/italic 根据实际情况)
  4. 点击 Convert → 下载生成的 JS 文件(例如:SourceHanSansCN-normal.js)

方式 B:本地转换(项目多字体时推荐)

  1. 打开 jsPDF/fontconverter/fontconverter.html(浏览器直接打开)
  2. 同上操作,生成 JS 文件

克隆 jsPDF 仓库:

git clone https://github.com/parallax/jsPDF.git 

生成的文件内容大致是:

(function(jsPDFAPI){var font ='AAEAAA...';// base64 编码的字体数据(很长)
jsPDFAPI.addFileToVFS('SourceHanSansCN-Normal.ttf', font);
jsPDFAPI.addFont('SourceHanSansCN-Normal.ttf','SourceHanSansCN','normal');
})(jsPDF.API);
步骤 3:在代码中引入并使用中文字体

完整示例代码(Vue/React/纯 JS 通用)

<!-- 1. 引入 jsPDF -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
<!-- 2. 引入你转换后的字体文件(推荐放 public 或 static 目录) -->
<script src="./fonts/SourceHanSansCN-normal.js"></script>
<script>
// 3. 生成 PDF
function generatePDF() {
  const { jsPDF } = window.jspdf;
  const doc = new jsPDF();
  // 设置中文字体(必须在 text 之前调用)
  doc.setFont('SourceHanSansCN','normal'); // 字体名要和 addFont 时一致
  // 可选:设置字体大小
  doc.setFontSize(16);
  // 输出中文(现在不会乱码了)
  doc.text('你好,世界!这是一个支持中文的 jsPDF 示例。', 20, 30);
  // 支持混合中英文
  doc.text('Hello, 这是一段中英混合文本,完美显示~', 20, 50);
  // 如果有粗体需求(需单独转换 bold 版本)
  // doc.setFont('SourceHanSansCN', 'bold');
  doc.save('中文 PDF 示例.pdf');
}
// 调用
// generatePDF();
</script>
常见问题 & 解决方案速查表
问题原因解决办法
仍然方框/乱码没调用 setFont必须在 text 前 doc.setFont('你的字体名')
字体名找不到(warning)addFont 的名称不匹配确认 addFont 的第 2 个参数(字体家族名)
PDF 文件超大完整 TTF 文件太大使用字体子集工具裁剪(只保留常用汉字)
转换后文件报错jsPDF 版本不兼容建议用 2.5.x 版本 + 对应转换工具
多人协作 / CDN 加载字体 JS 文件太大上传到 OSS/CDN,动态 import 或 xhr 加载
AutoTable 中文也乱码AutoTable 需要单独设置字体table.styles.font = '你的字体名'
推荐字体组合(生产级)
  • 正常文本:SourceHanSansCN-Normal
  • 粗体:SourceHanSansCN-Bold(需单独转换)
  • 标题:SourceHanSerifCN-Bold(宋体风格)

总结: 下载 TTF → 用 fontconverter 转成 JS → 引入 + setFont → 中文完美显示 整个过程最长不超过 10 分钟,就能彻底告别中文乱码。

目录

  1. jsPDF 中文显示解决方案:字体引入与配置指南
  2. 步骤 1:准备中文字体文件(.ttf)
  3. 步骤 2:将 TTF 转换为 jsPDF 可用的 JS 格式
  4. 步骤 3:在代码中引入并使用中文字体
  5. 常见问题 & 解决方案速查表
  6. 推荐字体组合(生产级)
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Electron 桌面应用打包实战:builder 与 packager 深度解析
  • 英伟达 GTC 2026:AI 智能体时代开启,Rubin 架构与新推理芯片发布
  • Agent 入门前置:大模型基础(开发向)
  • GitHub Copilot Pro 学生免费认证与 VS Code 实战配置
  • 机器人路径规划:D* Lite算法应对动态障碍物及Python实现
  • Ghostty + Yazi + Lazygit 构建现代化终端开发环境
  • LeetCode Hot 100 的哈希表题目实战整理
  • 通义万相 2.1 助力 AIGC 创作,多模态生成技术解析
  • 深入解析大模型主流微调方法:从 LoRA、QLoRA 到 Flash Attention、增量学习
  • AI 产品经理必懂:数据标注流程与模型评估
  • 宇树 G1 机器人强化学习训练环境搭建与奖励函数解析
  • Spring AI Alibaba Graph 初探与实践
  • MaaS 平台与阿里 QWQ 技术:AI 调参实战指南
  • 本地 AI 智能体 OpenClaw 功能特性与常用指令详解
  • Ubuntu 24.04 安装与配置 OpenClaw 实战指南
  • OpenClaw 集成飞书机器人部署指南
  • 用 Trae Solo 模式做微信小程序:一次 2 小时实战
  • 人形机器人 VR 遥操作实践
  • Java 8 JDK 国内镜像下载地址汇总
  • Paperzz 降重与 AIGC 检测功能解析:适配知网维普的合规方案

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online