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

vue2使用pdfmake

前言

电脑操作系统:windows11

node.js版本:v14.21.3

pdfmake版本:^0.2.20

pdfmake官网文档:https://pdfmake.github.io/docs/0.1/

包下载与引入

下载

npm install pdfmake

引入

import pdfMake from "pdfmake/build/pdfmake";
import pdfFonts from "pdfmake/build/vfs_fonts";
pdfMake.addVirtualFileSystem(pdfFonts);

引入字体

        系统默认给的字体(Roboto)仅支持英文,使用中文会出现乱码,对于国内来说没有中文是不可能的,所以需要引入字体来支持中文。

url链接方式引入(不推荐)

第一步,添加字体:

pdfMake.addFonts({Roboto: {normal: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Regular.ttf',bold: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Medium.ttf',italics: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-Italic.ttf',bolditalics: 'https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.66/fonts/Roboto/Roboto-MediumItalic.ttf'}
})

第二步,使用字体:

let docDefinition = {content: (...),defaultStyle: {font: 'Roboto'}
}

        这种方式仅适用于个人学习,实际生活中项目都是部署在内网环境中的,与外网隔绝,不可能做到随时下载字体的要求。

本地字体文件引入(推荐)

创建vfs_fonts.js文件

        1、本文以“仿宋”字体为例,项目中创建文件夹“src/utils/fonts/simfang”,将 simfang.ttf 字体文件放在该目录下;

        2、打开命令窗口,进入"项目目录/node_modules/pdfmake"目录下,执行以下命令:

node build-vfs.js "D:\pdfmakeTest\src\utils\fonts\simfang" "D:\pdfmakeTest\src\utils\fonts\simfang\vfs_fonts.js"

        第一个路径指存放本地字体文件的目录,只需要指定到目录级别,就会自动识别加载该目录下所有的字体文件;第二个目录指生成的js文件路径,具体到文件名,文件名可以自定义。

        3、上述命令执行后,就会生成字体js文件,如下图所示:

 

js中使用 pdfMake.addFonts(...) 加载本地字体

pdfMake.addFonts({Roboto: {normal: 'Roboto-Regular.ttf',bold: 'Roboto-Medium.ttf',italics: 'Roboto-Italic.ttf',bolditalics: 'Roboto-Italic.ttf'},simfang: {normal: 'simfang.ttf',bold: 'simfang.ttf',italics: 'simfang.ttf',bolditalics: 'simfang.ttf'}
})

pdfMake全局设置默认字体

let docDefinition = {content: (...),defaultStyle: {font: 'simfang'}
}

设置pdf文档内容

        可以自定义对pdf文档内容添加普通文字、链接、表格等,具体可参考文档。完整代码如下:

<template><div><el-button @click="exportPdf">导出PDF</el-button></div>
</template><script>
import pdfMake from "pdfmake/build/pdfmake";
import pdfFonts from "@/utils/fonts/simfang/vfs_fonts";export default {name: "PdfTest",methods: {exportPdf() {pdfMake.addFonts({Roboto: {normal: 'simfang.ttf',bold: 'simfang.ttf',italics: 'simfang.ttf',bolditalics: 'simfang.ttf'},simfang: {normal: 'simfang.ttf',bold: 'simfang.ttf',italics: 'simfang.ttf',bolditalics: 'simfang.ttf'}})let docDefinition = {header: '这是页眉',footer: {text: '这是页脚', alignment: 'right'},watermark: {text: '水印123', opacity: 0.5, angle: 30},content: [{text: '标题', style: 'header'},{text: '第一行文字!', fontSize: 16, bold: true},{text: '第二行文字', fontSize: 12, bold: false, alignment: 'justify'},{columns: [{width: 'auto',text: '第一列'},{width: '*',text: '第二列'},{width: 100,text: '第三列'},{width: '20%',text: '第四列'}],columnGap: 10},{qr: '二维码', fit: '150'},{table: {headerRows: 1,widths: ['25%', '25%', '25%', '25%'],body: [['姓名', '性别', '年龄', '身高'],['张三', '男', '22', '55kg'],['李四', '女', '18', '45kg']]}}],styles: {header: {fontSize: 30,bold: true,margin: [0, 0, 0, 10]}}};pdfMake.addVirtualFileSystem(pdfFonts);pdfMake.createPdf(docDefinition).open();// pdfMake.createPdf(docDefinition).download();}}
}
</script>

        pdf文档效果如下:

http://www.xdnf.cn/news/588295.html

相关文章:

  • Qt无边框界面添加鼠标事件
  • 吃透 Golang 基础:数据结构之切片
  • 实现了TCP的单向通信
  • 【数据库】-2 mysql基础语句(上)
  • 旋转编码器计次 红外对射传感器计次小实验及其相关库函数详解 (江协科技)
  • 第四章:YOLOv11 实战应用与开发指南
  • LeetCode 404.左叶子之和的迭代求解:栈结构与父节点定位的深度解析
  • 力扣.H指数力扣.字母异位词力扣.289生命游戏力扣452.用最小数量的箭引爆气球力扣.86分隔链表力扣.轮转数组
  • 高等数学-常微分方程
  • 国产三维CAD皇冠CAD(CrownCAD)建模教程:交流发电机
  • 推荐一个Excel与实体映射导入导出的C#开源库
  • 手写简单的tomcat
  • (泛函分析)线性算子连续必有界的证明
  • GraphRAG使用
  • 动态规划(七)——子数组系列(求和问题)
  • labview实现将百分制分数转换为等级制分数
  • Vue 3 官方 Hooks 的用法与实现原理
  • ai外呼平台:AnKo打造高效多模型服务体验!
  • labview实现LED流水灯的第二种方法
  • 每日算法刷题计划day13 5.22:leetcode不定长滑动窗口最短/最小1道题+求子数组个数越长越合法2道题,用时1h
  • 学习vue3:跨组件通信(provide+inject)
  • vscode include总是报错
  • Ubuntu24.04 LTS安装java8、mysql8.0
  • 【VScode】python初学者的有力工具
  • Labview使用报表工具
  • linux二进制安装mysql:
  • 遥控器处理器与光纤通信技术解析
  • 深入理解指针part1
  • 【Django ORM】三万字了解Django ORM的基本概念和基本使用
  • 并发编程之并发协同工具类