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/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 --><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;const doc =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 导出页面的完整中文版示例?
直接告诉我~

Read more

如何在Cursor中使用MCP服务

如何在Cursor中使用MCP服务

前言 随着AI编程助手的普及,越来越多开发者选择在Cursor等智能IDE中进行高效开发。Cursor不仅支持代码补全、智能搜索,还能通过MCP(Multi-Cloud Platform)服务,轻松调用如高德地图API、数据库等多种外部服务,实现数据采集、处理和自动化办公。 本文以“北京一日游自动化攻略”为例,详细讲解如何在 Cursor 中使用 MCP 服务,完成数据采集、数据库操作、文件生成和前端页面展示的全流程。 学习视频:cursor中使用MCP服务 一、什么是MCP服务? MCP(Multi-Cloud Platform)是Cursor内置的多云服务接口,支持调用地图、数据库、文件系统等多种API。通过MCP,开发者无需手动写HTTP请求或繁琐配置,只需在对话中描述需求,AI助手即可自动调用相关服务,极大提升开发效率。 二、环境准备 2.1 cursor Cursor重置机器码-解决Too many free trials. 2.

By Ne0inhk
MCP客户端与服务端初使用——让deepseek调用查询天气的mcp来查询天气

MCP客户端与服务端初使用——让deepseek调用查询天气的mcp来查询天气

本系列主要通过调用天气的mcp server查询天气这个例子来学习什么是mcp,以及怎么设计mcp。话不多说,我们开始吧。主要参考的是B站的老哥做的一个教程,我把链接放到这里,大家如果有什么不懂的也可以去看一下。 https://www.bilibili.com/video/BV1NLXCYTEbj?spm_id_from=333.788.videopod.episodes&vd_source=32148098d54c83926572ec0bab6a3b1d https://blog.ZEEKLOG.net/fufan_LLM/article/details/146377471 最终的效果:让deepseek-v3使用天气查询的工具来查询指定地方的天气情况 技术介绍 MCP,即Model Context Protocol(模型上下文协议),是由Claude的母公司Anthropic在2024年底推出的一项创新技术协议。在它刚问世时,并未引起太多关注,反响较为平淡。然而,随着今年智能体Agent领域的迅猛发展,MCP逐渐进入大众视野并受到广泛关注。今年2月,

By Ne0inhk
可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost

可以在命令行通过大模型使用上下文协议(MCP)与外部工具交互的软件:小巧的MCPHost

小巧的MCPHost MCPHost 可以在命令行下使用,使大型语言模型(LLM)能够通过模型上下文协议(MCP)与外部工具进行交互。目前支持Claude 3.5 Sonnet和Ollama等。本次实践使用自己架设的Deepseek v3模型,跑通了Time MCP服务。  官网:GitHub - mark3labs/mcphost: A CLI host application that enables Large Language Models (LLMs) to interact with external tools through the Model Context Protocol (MCP). 下载安装 使用非常方便,直接下载解压即可使用。官网提供Windows、Linux和MacOS三个系统的压缩包: https://github.com/

By Ne0inhk
实战篇:Python开发monogod数据库mcp server看完你就会了

实战篇:Python开发monogod数据库mcp server看完你就会了

原创不易,请关注公众号:【爬虫与大模型开发】,大模型的应用开发之路,整理了大模型在现在的企业级应用的实操及大家需要注意的一些AI开发的知识点!持续输出爬虫与大模型的相关文章。 前言 目前mcp协议是给deepseek大模型插上工具链的翅膀,让大模型不仅拥有超高的推理和文本生成能力,还能具备执行大脑意识的工具能力! 如何开发一个mcp? mcp是一种协议,指的是模型上下文协议 (Model Context Protocol)。 官方结成的mcp https://github.com/modelcontextprotocol/python-sdk mcp库 pip install mcp from mcp.server.fastmcp import FastMCP 我们先来做一个简单的案例 from mcp.server.fastmcp import FastMCP import requests mcp = FastMCP("spider") @mcp.tool() def crawl(

By Ne0inhk