本文最后更新于:2025年2月18日 下午
原因是默认字体不支持中文,需要更换字体。
详情官网:https://pdfmake.github.io/docs/0.1/fonts/custom-fonts-client-side/vfs/
官网的大致意思是,下载pdfmake后,自行生成可用的字体js文件
以下是详细操作:
重要前提:电脑上需要已安装nodejs
Nodejs官网:https://nodejs.org/zh-cn 下载安装即可
一、首先获取免费商用字体
推荐去字体天下获取:https://www.fonts.net.cn/
创建demo文件夹,进去再创建font文件夹,将下载的字体放到这里
具体参考如下文件目录结构
起始文件目录 >>>
1 2 3
| |-- demo # 项目文件夹名 |-- font # 字体文件夹 | |-- xxx.ttf # 下载的字体文件
|
然后单击demo文件夹直接托到vscode中打开
二、安装pdfmake
安装命令
成功示例:
PS D:\peter\桌面\vue项目> npm install pdfmake
added 42 packages in 11s
17 packages are looking for funding
run npm fund
for details
安装后的项目文件目录 >>>
1 2 3 4 5 6
| |-- demo # 项目根目录 |-- font # 字体文件夹 | |-- xxx.ttf # 下载的字体文件 |-- node_modules # 安装后生成的文件夹 |-- package-lock.json # 安装后生成的文件 |-- package.json # 安装后生成的文件
|
进入目标文件夹
执行命令
1
| cd node_modules/pdfmake/
|
成功示例:
PS D:\peter\桌面\vue项目> cd node_modules/pdfmake/
PS D:\peter\桌面\vue项目\node_modules\pdfmake>
生成目标js文件
执行命令
1
| node build-vfs.js "../../font/"
|
成功示例:
PS D:\peter\桌面\vue项目\node_modules\pdfmake> node build-vfs.js “…/…/font/”
Source path: …/…/font/
FILE: xxx.ttf
Builded 1 files to ./build/vfs_fonts.js.
PS D:\peter\桌面\vue项目\node_modules\pdfmake>
最终文件目录 >>>
1 2 3 4 5 6 7 8 9 10
| |-- demo # 项目根目录 |-- font # 字体文件夹 | |-- xxx.ttf # 下载的字体文件 |-- node_modules # 安装后生成的文件夹 | |-- pdfmake # 安装的pdfmake | | |-- build # 生成的内容文件夹 | | | |-- vfs_fonts.js # 这是生成的我们所需的最终文件 | |-- 其他文件... |-- package-lock.json # 安装后生成的文件 |-- package.json # 安装后生成的文件
|
然后进入目标文件夹内找到 vfs_fonts.js
即可。
三、将生成的此文件引入html
【重要】打开生成的vfs_fonts.js
也能看到名称,替换的名称要与此文件内的名称保持一致
1 2
| this.pdfMake = this.pdfMake || {}; this.pdfMake.vfs = { "xxx.ttf": "AAEAAAANAIAAAwBQRFNJRwAAAAEAGFQYAAAACEdQT1MOHRLOABg2...后面省略
|
使用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <script src="pdfmake.min.js"></script> <script src="vfs_fonts.js"></script>
<script> var fonts = { Roboto: { normal: 'xxx.ttf', bold: 'xxx.ttf', italics: 'xxx.ttf', bolditalics: 'xxx.ttf' } };
pdfMake.fonts = fonts; </script> <script> $(document).ready(function() { $('#table').DataTable({ buttons: [ 'excel', { extend: 'pdfHtml5', title: 'PDF 文件的标题', filename: 'PDF 文件名', messageTop: 'PDF 顶部显示的信息', customize: function (doc) { doc.defaultStyle = { font: 'Roboto' }; } } ], }); }); </script>
|
启动项目,点击pdf导出即可看到效果。
四、补充
由于生成是针对文件夹内的所有字体生成的,因此可以下载多个字体,配置的时候选择配置即可。