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

AI绘画R18提示词实战指南:从基础原理到安全实践

快速体验 在开始今天关于 AI绘画R18提示词实战指南:从基础原理到安全实践 的探讨之前,我想先分享一个最近让我觉得很有意思的全栈技术挑战。 我们常说 AI 是未来,但作为开发者,如何将大模型(LLM)真正落地为一个低延迟、可交互的实时系统,而不仅仅是调个 API? 这里有一个非常硬核的动手实验:基于火山引擎豆包大模型,从零搭建一个实时语音通话应用。它不是简单的问答,而是需要你亲手打通 ASR(语音识别)→ LLM(大脑思考)→ TTS(语音合成)的完整 WebSocket 链路。对于想要掌握 AI 原生应用架构的同学来说,这是个绝佳的练手项目。 从0到1构建生产级别应用,脱离Demo,点击打开 从0打造个人豆包实时通话AI动手实验 AI绘画R18提示词实战指南:从基础原理到安全实践 背景痛点分析 1. 伦理风险与合规挑战 在AI绘画领域,R18内容创作面临着多重挑战。平台审核机制日益严格,违规内容可能导致账号封禁甚至法律风险。同时,不同地区对数字内容的法律界定存在差异,开发者需要特别注意合规边界。

By Ne0inhk

RMBG-2.0多任务协同方案:接入Stable Diffusion工作流,生成→抠图→合成一体化

RMBG-2.0多任务协同方案:接入Stable Diffusion工作流,生成→抠图→合成一体化 1. 为什么抠图成了AI图像工作流的“卡点”? 你有没有遇到过这样的场景:用Stable Diffusion生成了一张绝美的角色立绘,但背景太杂乱,想换到电商详情页却卡在了抠图环节?手动PS耗时半小时,AI在线工具又担心图片上传泄露隐私,还动不动就崩掉——毛发边缘糊成一片,玻璃杯透明感全无,甚至把飘动的发丝直接切掉。 这不是个别现象。大量设计师、内容创作者、电商运营者反馈:生成容易,落地难;模型很炫,流程断在抠图这一步。 而RMBG-2.0(BiRefNet)的出现,正在悄悄改变这个局面。它不是又一个“差不多能用”的抠图工具,而是首个真正意义上能无缝嵌入本地AI图像工作流的高精度、低延迟、零隐私风险抠图引擎。它不只解决“能不能抠”,更解决“抠完怎么用”——直接对接SD WebUI、ComfyUI、乃至自定义Python脚本,让“生成→

By Ne0inhk

手把手教你部署Z-Image-Turbo,5分钟搞定AI绘画环境

手把手教你部署Z-Image-Turbo,5分钟搞定AI绘画环境 你是否还在为部署文生图模型时漫长的权重下载、复杂的依赖配置而头疼?现在,这一切都可以结束了。本文将带你5分钟内完成Z-Image-Turbo的完整部署,无需等待下载、不用手动安装依赖,真正实现“开箱即用”的AI绘画体验。 我们将使用预置了完整32.88GB模型权重的专用镜像,一键启动即可生成1024×1024高清图像,仅需9步推理,速度快到惊人。无论你是AI绘画新手,还是想快速测试效果的技术人员,这篇文章都能让你立刻上手。 准备好了吗?让我们开始吧。 1. 镜像简介:为什么选择Z-Image-Turbo? 1.1 模型核心优势 Z-Image-Turbo 是阿里达摩院基于 DiT(Diffusion Transformer)架构推出的高效文生图模型,专为高速高质量生成设计。相比传统扩散模型动辄20~50步的推理过程,它仅需9步即可输出细节丰富的图像,在RTX 4090D等高显存机型上几乎秒级出图。 更关键的是,本次使用的镜像已预置全部32.88GB模型权重文件,直接缓存在系统盘中,避免了动辄数小时的下载等

By Ne0inhk

Qwen2.5-7B智能写作:营销文案自动生成实战

Qwen2.5-7B智能写作:营销文案自动生成实战 1. 引言:大模型驱动内容创作新范式 1.1 营销文案生成的行业痛点 在数字营销时代,高质量、高频率的内容输出已成为品牌竞争的核心。然而,传统文案创作面临三大挑战: * 人力成本高:专业文案撰写耗时耗力,难以满足多平台、多语种的内容需求 * 风格一致性差:不同作者或团队产出的内容调性不统一,影响品牌形象 * 响应速度慢:面对热点事件或市场变化,人工创作难以实现分钟级响应 尽管已有多种AI写作工具,但在长文本逻辑连贯性、结构化输出控制、多语言适配能力等方面仍存在明显短板。 1.2 Qwen2.5-7B的技术突破与应用价值 Qwen2.5 是最新的 Qwen 大型语言模型系列。对于 Qwen2.5,我们发布了从 0.5 到 720 亿参数的多个基础语言模型和指令调优语言模型。Qwen2.5 在 Qwen2

By Ne0inhk