【vue3.0】实现导出的PDF文件内容是红头文件格式

效果图:

在这里插入图片描述

编写文件里面的主要内容

  <main><div id="report-box"><p>线索描述</p><p class="label"><span>线索发现时间:</span> <span>{{ detailInfoVal?.problem.createdDate }}</span></p><p class="label"><span>派发时间:</span> <span>{{ detailInfoVal?.taskCreateTime }}</span></p><p class="label"><span>所属责任区:</span> <span>{{ detailInfoVal?.problem.regionalName }}</span></p><p>处置描述</p><ElInputv-model="textarea":autosize="{ minRows: 4, maxRows: 4 }"maxlength="200"type="textarea"placeholder="请填写"show-word-limit/><div style="margin-top: 10px"><p>整改图片对比</p><span>【整改前 {{ detailInfoVal?.taskCreateTime }}</span><br /><ElImagev-for="(item, index) in srcList":key="item"class="img":infinite="false":src="item":zoom-rate="1.2":initial-index="initialIndexImage":preview-src-list="srcList"fit="cover"hide-on-click-modal@show="onPreviewImg(index)"/><br /><span>【整改后 {{ detailInfoVal?.taskUpdateTime }}</span><div v-if="srcList2.length" class="img_box"><div v-for="(item, index) in srcList1" :key="index"><imgv-if="['png', 'jpg', 'jpeg'].includes(item.type)":src="item.url"style="width: 120px; height: 120px; border-radius: 5px; margin-right: 5px"/></div></div><br /><span v-if="!srcList2.length">暂无图片信息</span></div></div></main>

在导出事件里面处理文件的红色标题以及红丝横线,小圆点功能

在这里插入图片描述

在这里插入图片描述

使用的工具:【jspdf】【html2canvas】

npm install jspdf
npm install html2canvas

引入

import jsPDF from 'jspdf';
import html2canvas from 'html2canvas';
import dayjs from 'dayjs';//文件里内容我用到了时间

核心代码

html2canvas(document.querySelector('#report-box'), { backgroundColor: '#fff', useCORS: true }).then((canvas) => {const pageData = canvas.toDataURL('image/png');var contentWidth = canvas.width;var contentHeight = canvas.height;var imgWidth = 530;var imgHeight = (595.28 / contentWidth) * contentHeight;var pdf = new jsPDF('', 'pt', 'a4'); // 纵向排列window.pdfAddFont(pdf);pdf.addFont('SourceHanSans-Normal.ttf', 'SourceHanSans-Normal', 'normal');pdf.setFont('SourceHanSans-Normal');const fontColor = 'red'; //文字的颜色,哪里需要设置 就在需要添加文字之前去执行// 添加双横线的函数function addDoubleLine(y) {pdf.setLineWidth(5);pdf.setDrawColor(255, 0, 0);// 绘制第一条横线pdf.line(40, y, 570, y);pdf.setLineWidth(2);// 绘制第二条横线,y + 10 表示下方有10单位的间隔pdf.line(40, y + 5, 570, y + 5);}// 添加圆点function addDoubleDot(x, y) {// 设置圆的样式(红色填充)pdf.setFillColor('red');// 开始一个新的路径const radius = 1;pdf.ellipse(x, y, radius, radius);}pdf.setFontSize(20); // 设置字体大小pdf.setTextColor(fontColor); // 设置字体颜色pdf.text('有害生物异常任务报告', 620 / 2, 40, {  //第二个参数 和第三个参数(左、上)align: 'center',});pdf.setFontSize(12); // 设置字体大小pdf.setTextColor(0, 0, 0);pdf.text('有害生物防治检疫站', 40, 75, {align: 'left',});pdf.text(`${dayjs().format('YYYY-MM-DD HH:mm:ss')}`, 570, 75, {align: 'right',});pdf.setTextColor(227, 60, 47);// 调用函数添加双横线addDoubleLine(80);pdf.addImage(pageData, 'JPEG', 40, 110, imgWidth, imgHeight);pdf.setFontSize(12); // 设置字体大小pdf.setTextColor(113, 115, 118);pdf.text(`编辑${userRoleInfo.value.userName}`, 40, imgHeight + 160, {align: 'left',});// 调用函数添加双横线addDoubleLine(imgHeight + 140);// 调用函数添加小圆点addDoubleDot(620 / 2, imgHeight + 155);pdf.save(`有害生物异常任务报告-${dayjs().format('YYYY-MM-DD HH:mm:ss')}`);});

备注

代码中添加字体之前调用了 window.pdfAddFont() 是提前写好的一个js文件,放到了服务器上,文件的内容
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/5fcc724083f342fe9d5987d2fd1a21b5.png

其中对于html2canvas参数的介绍如下:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/770104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++经典面试题目(四)

1、请解释const关键字的作用。 在C中&#xff0c;const关键字主要用来表示“不变性”&#xff0c;即被它修饰的东西是不可修改的。它可以用于多种上下文&#xff1a; 修饰基本数据类型变量&#xff1a;声明一个常量&#xff0c;一旦初始化后&#xff0c;其值就不能再更改。 co…

MyBatis3源码深度解析(二十一)动态SQL实现原理(二)动态SQL解析过程、#{}和${}的区别

文章目录 前言8.5 动态SQL解析过程8.5.1 SQL配置转换为SqlSource对象8.5.2 SqlSource转换为静态SQL语句 8.6 #{}和${}的区别8.7 小结 前言 在【MyBatis3源码深度解析(二十)动态SQL实现原理(一)动态SQL的核心组件】中研究了MyBatis动态SQL相关的组件&#xff0c;如SqlSource用于…

AAC相关知识

一、AAC音频格式种类有哪些 AAC音频格式是一种由MPEG-4标准定义的有损音频压缩格式。AAC包含两种封装格式 ADIF&#xff08;Audio Data Interchange Format音频数据交换格式&#xff09;和ADTS&#xff08;Audio Data transport Stream音频数据传输流&#xff09;。 ADIF 特点…

【Node.js】流

概念 流&#xff08;Stream&#xff09;是一种用于在节点&#xff08;Node&#xff09;之间传输数据的抽象概念。 它可以看作是一种连续的数据流&#xff0c;数据可以按照连续的块&#xff08;chunk&#xff09;通过流从源&#xff08;source&#xff09;流向目的地&#xff…

LeetCode Hot100-哈希-两数之和

题目描述&#xff1a; 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值 target 的两个整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可…

蓝桥杯 完全二叉树的权值

Problem: 蓝桥杯 完全二叉树的权值 文章目录 思路解题方法前缀和双指针 复杂度前缀和Code双指针Code 思路 这个问题是关于完全二叉树的权值。完全二叉树的特性是&#xff0c;除了最后一层外&#xff0c;其他各层的节点数都达到最大&#xff0c;且最后一层从左向右连续。在这个问…

数据分析-Pandas类别数据序列合并

数据分析-Pandas类别数据序列合并 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&…

双进程交互实现App自动重启

背景 你可能会好奇&#xff0c;有些手游&#xff08;比如王者荣耀&#xff09;是怎么实现资源更新后自动重启的&#xff1f; 这个体验确实不错&#xff0c;因为不需要用户手动点击桌面图标重启App&#xff0c;在一些数据恢复备份的场景中&#xff0c;很实用。比如&#xff0c…

代码随想录算法训练营第二十天| 654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

题目与题解 654.最大二叉树 题目链接&#xff1a;654.最大二叉树 代码随想录题解&#xff1a;654.最大二叉树 视频讲解&#xff1a;又是构造二叉树&#xff0c;又有很多坑&#xff01;| LeetCode&#xff1a;654.最大二叉树_哔哩哔哩_bilibili 解题思路&#xff1a; 构造最大二…

数据库及中表的创建和管理

目录 创建数据库 使用数据库(使用,查看信息) 修改数据库(删除,修改)

promethus的安装使用

1、# 软件下载地址 https://prometheus.io/download/ https://grafana.com/grafana/download https://prometheus.io/download/ Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。 Prometheus 的优点 1、非常少的外部依赖,安装…

OceanBase4.2.2.1 单机集群在ArmX86安装(自测记录)

OceanBase OceanBase就不必多加介绍了&#xff0c;本次主要是分享对于它的安装使用&#xff0c;先说说背景&#xff0c;首先接触是因为信创国产化的要求&#xff0c;为满足支持国产化&#xff0c;安装了Arm架构下版本4.0.0&#xff0c;满足支持通过。后来项目实际使用&#xff…

由浅到深认识Java语言(20):包装类

该文章Github地址&#xff1a;https://github.com/AntonyCheng/java-notes 在此介绍一下作者开源的SpringBoot项目初始化模板&#xff08;Github仓库地址&#xff1a;https://github.com/AntonyCheng/spring-boot-init-template & CSDN文章地址&#xff1a;https://blog.c…

JavaScript中实现数组去重

在JavaScript中实现数组去重是一个常见的问题&#xff0c;下面是一个使用不同方法实现数组去重的示例代码&#xff1a; 方法一&#xff1a;使用Set对象 javascript function uniqueArray(arr) { return [...new Set(arr)]; } const arr [1, 2, 3, 3, 4, 5, 5, 6]; cons…

leetcode刷题日记-外观数组

题目描述 解题思路 初始化字符串 init 为 “1”&#xff0c;作为外观数列的第一项。 通过循环迭代生成外观数列的下一项&#xff0c;循环次数为 n-1&#xff0c;因为已经初始化了第一项。 在每次迭代中&#xff0c;通过两个指针 pos 和 start 来遍历当前项 init&#xff0c;po…

C++中的枚举类型

C中的enum&#xff08;枚举&#xff09;类型是一种用户定义的类型&#xff0c;用于表示一组整数值&#xff0c;每个值都有对应的名称&#xff0c;增强了代码的可读性和可维护性。 1. 基本枚举类型 基本的枚举类型定义了一组命名的整数常量。 enum Color {RED,GREEN,BLUE };C…

创业之路:探索如何在Facebook上创业成功

引言 在当今数字化时代&#xff0c;社交媒体已成为创业者们开展业务、建立品牌和推广产品的重要平台之一。作为全球最大的社交媒体平台之一&#xff0c;Facebook为创业者提供了丰富的机会和资源。本文将探讨如何在Facebook上创业成功的关键因素和实践方法&#xff0c;帮助创业…

Spring Cloud: openFegin

文章目录 一、什么是openFegin 一、什么是openFegin Spring Cloud OpenFeign 是一个声明式的 Web Service 客户端&#xff0c;它使得编写 Web Service 客户端变得更加简单。OpenFeign 整合了 Ribbon 和 Hystrix&#xff0c;提供了负载均衡和容错机制。同时&#xff0c;OpenFei…

语 句 篇

文章目录 1. if 语句2. for 循环3. while 循环 1. if 语句 if 语句用于基于某个条件执行代码。如果条件为真&#xff08;True&#xff09;&#xff0c;则执行相应的代码块&#xff1b;如果条件为假&#xff08;False&#xff09;&#xff0c;则跳过该代码块。 基本语法&#…

第九届蓝桥杯大赛个人赛省赛(软件类)真题C 语言 A 组-第几个幸运数字

幸运数字是可以被3,5,7任一整除的数字&#xff0c;列举小明号码内的所有可能组合并计数。注意别忘了把1占的一位减去。 #include<stdio.h> typedef long long ll; int main(){long long ans 0, n 59084709587505LL;for(ll i 1; i < n; i * 3){//计算小于等于n的数…