当前位置: 首页 > news >正文

一文解决jQuery表格插件DataTable导出PDF中文乱码问题

原因是默认字体不支持中文,需要更换字体。

详情官网:pdfmake

官网的大致意思是,下载pdfmake后,自行生成可用的字体js文件

以下是详细操作:

重要前提:电脑上需要已安装nodejs

点击进入官网下载安装即可:Nodejs官网

一、首先获取免费商用字体

推荐去字体天下获取:字体天下官网

创建demo文件夹,进去再创建font文件夹,将下载的字体放到这里

具体参考如下文件目录结构

起始文件目录 >>>

|-- demo							  # 项目文件夹名|-- font                          # 字体文件夹|   |-- xxx.ttf                   # 下载的字体文件

然后单击demo文件夹直接托到vscode中打开

二、安装pdfmake
安装命令
npm install pdfmake

成功示例:

PS D:\peter\桌面\demo> npm install pdfmake

added 42 packages in 11s

17 packages are looking for funding
run npm fund for details

安装后的项目文件目录 >>>

|-- demo							  # 项目根目录|-- font                          # 字体文件夹|   |-- xxx.ttf                   # 下载的字体文件|-- node_modules                  # 安装后生成的文件夹|-- package-lock.json             # 安装后生成的文件|-- package.json                  # 安装后生成的文件
进入目标文件夹

执行命令

cd node_modules/pdfmake/

成功示例:

PS D:\peter\桌面\demo> cd node_modules/pdfmake/
PS D:\peter\桌面\demo\node_modules\pdfmake>

生成目标js文件

执行命令

node build-vfs.js "../../font/"

成功示例:

PS D:\peter\桌面\demo\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\桌面\demo\node_modules\pdfmake>

最终文件目录 >>>

|-- demo							  # 项目根目录|-- font                          # 字体文件夹|   |-- xxx.ttf                   # 下载的字体文件|-- node_modules                  # 安装后生成的文件夹|   |-- pdfmake                   # 安装的pdfmake|   |   |-- build         		  # 生成的内容文件夹|   |   |   |-- vfs_fonts.js      # 这是生成的我们所需的最终文件|   |-- 其他文件...|-- package-lock.json             # 安装后生成的文件|-- package.json                  # 安装后生成的文件

然后进入目标文件夹内找到 vfs_fonts.js即可。

三、将生成的此文件引入html

【重要】打开生成的vfs_fonts.js也能看到名称,替换的名称要与此文件内的名称保持一致

this.pdfMake = this.pdfMake || {}; this.pdfMake.vfs = {"xxx.ttf": "AAEAAAANAIAAAwBQRFNJRwAAAAEAGFQYAAAACEdQT1MOHRLOABg2...后面省略

使用示例:

<!-- 请根据自己存放的路径引入 >>> 此处为示例 -->
<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导出即可看到效果。

四、补充

由于生成是针对文件夹内的所有字体生成的,因此可以下载多个字体,配置的时候选择配置即可。

http://www.lryc.cn/news/456243.html

相关文章:

  • 使用pytorch进行迁移学习的两个步骤
  • ChatGPT相关参数示例
  • OWASP发布大模型安全风险与应对策略(QA测试重点关注)
  • 【HarmonyOS开发笔记 2 】 -- ArkTS语法中的变量与常量
  • UI自动化测试示例:python+pytest+selenium+allure
  • C/C++ 编程小工具
  • 第四十二章 使用 WS-ReliableMessaging
  • 利士策分享,婚姻为何被称为大事?
  • malloc源码分析之 ----- 你想要啥chunk
  • 软考系统分析师知识点五:数据通信与计算机网络
  • windows客户端SSH连接ubuntu/linux服务器,三种网络连接:局域网,内网穿透(sakuraftp),虚拟局域网(zerotier)
  • Python 工具库每日推荐【openpyxl 】
  • 本地生活服务项目入局方案解析!本地生活服务商系统能实现怎样的作业效果?
  • ML 系列:【13 】— Logistic 回归(第 2 部分)
  • 45岁被裁员的程序员,何去何从?
  • 云计算Openstack Neutron
  • PointNet++网络详解
  • Java | Leetcode Java题解之第459题重复的子字符串
  • 【动态规划-最长公共子序列(LCS)】【hard】力扣1092. 最短公共超序列
  • ‌图片编辑为底片,智能工具助力,创作精彩视觉作品
  • 机器学习/数据分析--用通俗语言讲解时间序列自回归(AR)模型,并用其预测天气,拟合度98%+
  • 回溯算法之值子集和问题详细解读(附带Java代码解读)
  • mysql游标的使用
  • linux udev详解
  • EventSource和websocket该用哪种技术
  • 通信工程学习:什么是三网融合
  • 自定义类型结构体(上)
  • b站-湖科大教书匠】4 网络层 - 计算机网络微课堂
  • 国际 Android WPS Office v18.13 解锁版
  • 【中间件学习】Git的命令和企业级开发