news 2026/5/30 23:12:20

3步搞定jsPDF中文显示:从乱码到完美输出的完整指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
3步搞定jsPDF中文显示:从乱码到完美输出的完整指南

3步搞定 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 仓库:
    gitclone https://github.com/parallax/jsPDF.git
  2. 打开jsPDF/fontconverter/fontconverter.html(浏览器直接打开)
  3. 同上操作,生成 JS 文件

生成的文件内容大致是

(function(jsPDFAPI){varfont='AAEAAA...';// base64 编码的字体数据(很长)jsPDFAPI.addFileToVFS('SourceHanSansCN-Normal.ttf',font);jsPDFAPI.addFont('SourceHanSansCN-Normal.ttf','SourceHanSansCN','normal');})(jsPDF.API);

步骤 3:在代码中引入并使用中文字体

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

<!-- 1. 引入 jsPDF --><scriptsrc="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script><!-- 2. 引入你转换后的字体文件(推荐放 public 或 static 目录) --><scriptsrc="./fonts/SourceHanSansCN-normal.js"></script><script>// 3. 生成 PDFfunctiongeneratePDF(){const{jsPDF}=window.jspdf;constdoc=newjsPDF();// 设置中文字体(必须在 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 分钟,就能彻底告别中文乱码。

需要我提供某个具体字体的转换后代码片段?
或者想看结合 html2canvas + jsPDF 导出页面的完整中文版示例?
直接告诉我~

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 18:40:14

DNA存储数据高温降解率测试工具:软件测试从业者的专业解析

在生物计算领域&#xff0c;DNA存储技术凭借其超高密度和长效性成为数据存储的新兴方案&#xff0c;但高温环境下的DNA降解问题一直是关键挑战。本文从软件测试从业者的角度&#xff0c;解析DNA降解率测试工具的技术原理、验证方法&#xff0c;并结合2026年公众号内容热度趋势&…

作者头像 李华
网站建设 2026/5/28 12:05:54

Linux 内核内存管理基石:页面分配器(Page Allocator)深度解析

Linux 内核内存管理基石&#xff1a;页面分配器&#xff08;Page Allocator&#xff09;深度解析 Linux 内核的内存管理是操作系统高效运行的核心&#xff0c;而**页面分配器&#xff08;Page Allocator&#xff09;则是其基石。它负责管理物理内存页面&#xff08;通常为 4KB…

作者头像 李华
网站建设 2026/5/28 12:05:55

leetcode 900. RLE Iterator RLE 迭代器-耗时100

Problem: 900. RLE Iterator RLE 迭代器 耗时100%&#xff0c;每次移除已经用掉的数字部分的&#xff0c;若是没用完则修改到剩下的数量&#xff0c;若是全部用完清空并返回-1 Code class RLEIterator { public:vector<int> enc;RLEIterator(vector<int>& enc…

作者头像 李华
网站建设 2026/5/29 2:14:07

YOLO26涨点改进 | 全网独家创新、特征融合改进篇 | CVPR 2024 顶会| 引入MFM调制融合模块, LEGM局部到全局模块,二者共同合作,多种创新改进,助力YOLO26高效涨点

一、本文介绍 本文给大家介绍MFM调制融合模块和LEGM局部到全局模块改进YOLO26模型!MFM和LEGM这种相互增强的学习策略,使得所提出的方法在计算机视觉各种任务性能上超越了现有先进方法,助力YOLO26 高效涨点!具体怎么使用请看全文。 🔥欢迎订阅我的专栏、带你学习使用最新…

作者头像 李华
网站建设 2026/5/28 21:40:35

2026年毕业论文自救指南:10款降AI率工具深度实测(附价格与避坑表)

Students help students.我今年写论文时候AI率用了三周才降下去&#xff0c;为了帮助大家解决论文AIGC率居高不下的难题&#xff0c;我根据最新的实测数据&#xff0c;整理了市面上10款主流的降AI工具。这不仅是一份工具清单&#xff0c;更是一份帮你省钱、省力的实操攻略。&am…

作者头像 李华
网站建设 2026/5/29 23:46:19

LVM分区创建、数据迁移与重新挂载操作文档

LVM分区创建、数据迁移与重新挂载操作文档 文档说明 操作场景&#xff1a;将原有数据目录&#xff08;/opt/data&#xff09;迁移至新建LVM逻辑卷&#xff0c;提升磁盘存储的灵活性&#xff08;扩容、缩容等&#xff09;&#xff0c;可在虚拟机上先操作操作对象&#xff1a;L…

作者头像 李华