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

news2024/12/23 12:09:16

效果图:

在这里插入图片描述

编写文件里面的主要内容

  <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>
          <ElInput
            v-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 />
            <ElImage
              v-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">
                <img
                  v-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.coloradmin.cn/o/1538212.html

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

相关文章

springboot295基于Mysql的商业辅助决策系统的设计与实现

商业辅助决策系统的设计与实现 摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统收支信息和销售订单信息管…

C#,图论与图算法,有向图(Direct Graph)广度优先遍历(BFS,Breadth First Search)算法与源程序

1 图的广度优先遍历 图的广度优先遍历(或搜索)类似于树的广度优先遍历(参见本文的方法2)。这里唯一需要注意的是,与树不同,图可能包含循环,因此我们可能再次来到同一个节点。为了避免多次处理节点,我们使用布尔访问数组。为简单起见,假设所有顶点都可以从起始顶点到达…

python的stone音乐播放器的设计与实现flask-django-php-nodejs

该系统利用python语言、MySQL数据库&#xff0c;flask框架&#xff0c;结合目前流行的 B/S架构&#xff0c;将stone音乐播放器的各个方面都集中到数据库中&#xff0c;以便于用户的需要。该系统在确保系统稳定的前提下&#xff0c;能够实现多功能模块的设计和应用。该系统由管理…

python的OA公文发文管理系统flask-django-php-nodejs

采用结构化的分析设计&#xff0c;该方法要求结合一定的图表&#xff0c;在模块化的基础上进行系统的开发工作。在设计中采用“自下而上”的思想&#xff0c;在OA公文发文管理系统实现了用户、公文分类、公文信息、待办提醒等的功能性。系统根据现有的管理模块进行开发和扩展&a…

hyperf 二十八 修改器 一

教程&#xff1a;Hyperf 一 修改器和访问器 根据教程&#xff0c;可设置相关函数,如set属性名Attribute()、get属性名Attribute()&#xff0c;设置和获取属性。这在thinkphp中也常见。 修改器&#xff1a;set属性名Attribute()&#xff1b;访问器&#xff1a;get属性名Attri…

StarRocks-2.5.13部署安装

1、安装jdk11 tar xf jdk-11.0.16.1_linux-x64_bin.tar.gz mv jdk-11.0.16.1 /data/soft/jdk-11 # 配置在/etc/profile中 export JAVA_HOME/data/soft/jdk-11 export CLASSPATH.:/data/soft/jdk-11/lib export PATH/data/soft/jdk-11/bin:$PATH # 验证jdk [rootdb-public-03 s…

基于ArcGIS的2015-2020辽宁省土地利用变化分析

数据准备 栅格转面 运行ArcToolbox&#xff0c;打开【转换工具】&#xff0c;选择【从栅格转出】里面的【栅格转面工具】&#xff0c;调出面板进行参数设置。输入栅格选择裁剪的2015年中国土地利用遥感监测数据&#xff08;…

Jupyter R绘图 汉字显示乱码的解决办法

1.Jupyte中&#xff0c;R绘图&#xff0c;汉字显示乱码 2.如何解决&#xff1f; (1)R中安装showtext 登录linux服务器 #R > install.packages(“showtext”) … 出错 (2)退出R,安装freetype-config #apt install libfreetype6-dev 出错 &#xff08;3&#xff09;进入R&…

嵌入式Linux 内核启动过程详解(第一阶段:汇编语言部分)

目录 概述 1 简述PC Linux 启动过程 2 嵌入式Linux内核启动流程 2.1 嵌入式Linux内核启动分析 2.2 启动Linux内核前的准备 2.3 启动内核第一阶段流程图 3 嵌入式Linux内核启动分析 3.1 链接文件 vmlinux.lds 3.2 启动文件head.S 3.2 启动文件head-common.S 概述 本文…

2024蓝桥杯每日一题(哈希)

备战2024年蓝桥杯 -- 每日一题 Python大学A组 试题一&#xff1a;星空之夜 试题二&#xff1a;模拟散列表 试题三&#xff1a;字符串哈希 试题四&#xff1a;四数方和 试题五&#xff1a;扫雷 试题一&#xff1a;星空之夜 【题目描述】 夜空深…

【JavaScript 漫游】【041】File 对象、FileList 对象、FileReader 对象

文章简介 本篇文章为【JavaScript 漫游】专栏的第 041 篇文章&#xff0c;主要对浏览器模型中 File 对象、FileList 对象和 FileReader 对象的知识点进行了简记。 File 对象 File 对象代表一个文件&#xff0c;用来读写文件信息。它继承了 Blob 对象&#xff0c;或者说是一种…

Springboot+vue的四川美食分享网站+数据库+报告+免费远程调试

项目介绍: Springbootvue的四川美食分享网站。Javaee项目&#xff0c;springboot vue前后端分离项目 本文设计了一个基于Springbootvue的前后端分离的四川美食分享网站&#xff0c;采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&am…

计算机视觉之三维重建(3)---单视几何

文章目录 一、问题提出二、无穷远点、无穷远线、无穷远平面2.1 2D空间2.2 3D空间 三、影消点和影消线3.1 2D平面上的无穷远点&#xff0c;无穷远线变换3.2 影消点3.3 影消线 四、单视重构 一、问题提出 1. 当摄像机标定后&#xff0c;内部参数 K K K 已知&#xff0c;外部参数…

界面控件DevExpress ASP.NET Ribbon组件 - 完美复刻Office 365体验!

无论用户是喜欢传统工具栏菜单外观、样式&#xff0c;还是想在下一个项目中复制Office 365 web UI&#xff0c;DevExpress ASP.NET都提供了所需要的工具&#xff0c;帮助用户打造更好的应用程序界面。 P.S&#xff1a;DevExpress ASP.NET Web Forms Controls拥有针对Web表单&a…

JavaWeb -- HTTP -- WEB服务器TOMCAT

一.HTTP介绍: HTTP(Hyper Text Protocol) 实际上是一种超文本传输的协议,规定了浏览器跟服务器之间的一些数据传输的规则 例如B/S 对于浏览器的请求,以及相应服务器的响应,都必须依靠这种协议,规范,才能够彼此之间相互 理解 HTTP的协议特点: 1.基于TCP协议: 面向连接 更加安全…

Vscode初建Vue时几个需要注意的问题

首先放图 注意点1.打开文件夹时&#xff0c;可以是VUE2 或者其他&#xff0c;但不能是VUE&#xff0c;会报错 注意点2.终端输入命令“npm init -y" npm init -y -y 的含义&#xff1a;yes的意思&#xff0c;在init的时候省去了敲回车的步骤&#xff0c;生成的默认的packag…

【目标检测】YOLOv9理论解读与代码分析

前言 YOLO这个系列的故事已经很完备了&#xff0c;比如一些Decoupled-Head或者Anchor-Free等大的策略改动已经在YOLOv8固定下来&#xff0c;后面已经估计只有拿一些即插即用的tricks进行小改。 mmdetection框架的作者深度眸也在知乎上对“是否会有YOLOv9”这一观点发表看法&a…

搞了半天blender整动画这么爽,骨骼重定向一回,动作就可以到处套用,和音频对轨也好使

我们搞到了运动数据&#xff08;可能是bvh文件&#xff0c;也可能是fbx文件&#xff09;之后&#xff0c;想要让某个静态的模型动起来。 我们假定用的是Tpose的模型&#xff08;因为我这个bvh文件是Tpose用的&#xff0c;所以为了动作映射不出问题&#xff0c;优先整的这种模型…

C语言——利用冒泡排序模拟实现qsort函数

一.冒泡排序 冒泡排序是C语言中众多排序中的一种。它的排序逻辑为&#xff08;升序&#xff09;&#xff1a;从第一个元素开始和相邻的比较&#xff0c;如果第一个元素大于第二个元素&#xff0c;则交换&#xff0c;反之不交换&#xff1b;第二个再与第三个元素比较&#xff0…

jsvmp逆向实战X-Bogus篇,算法还原

jsvmp逆向实战X-Bogus篇&#xff0c;算法还原 前言X-Bogus算法逻辑寻找log插桩位置第四步第三步 前言 看过很多大佬关于X-Bogus算法还原的文章&#xff0c;都是通过log插桩&#xff0c;分析日志信息再结合动态调试一步步抽丝剥茧&#xff0c;最终还原算法&#xff0c;但是不同…