Vue如何将网页转换成图片或PDF并上传

news2024/11/23 20:29:48

一.使用html2canvas获取页面元素并绘制成图片

htmlcanvas中文文档

npm install --save html2canvas

<template>
	<div>
		<button @click="uploadImg">上传</button>
		<div ref="yourDom">
			<!-- ...图片中页面内容 -->
			<img src="@/assets/logo/logo.png" alt="" />
		</div>
	</div>
</template>

import html2canvas from 'html2canvas';

	//base64转file
    base64ToFile(dataURL, filename) {
      let arr = dataURL?.split?.(',');
      let youType = arr[0].match(/:(.*?);/)[1];
      let bstr = atob(arr[1]),
        n = bstr.length,
        u8arr = new Uint8Array(n);
      while (n--) {
        u8arr[n] = bstr.charCodeAt(n);
      }
      return new File([u8arr], filename + '.' + youType.split('/')[1], { type: youType });
    },
    
    //点击上传按钮
    uploadImg() {
      html2canvas(this.$refs.yourDom, {
        allowTaint: true, //是否允许不同源的图片污染画布
        useCORS: true, //是否尝试使用 CORS 从服务器加载图片
        scale: 2, //用于渲染的比例,默认为浏览器设备像素比率。
      }).then(canvas => {
        // canvas.toDataURL(type, encoderOptions) 是 JavaScript 中用于将 <canvas> 元素的内容转换为数据 URL 的方法
        // type:指定输出的图像类型,默认为 "image/png"。也可以是 "image/jpeg" 或 "image/webp" 等格式。
        // encoderOptions:用于指定图像编码质量或压缩级别的参数(取值范围为 0-1),仅适用于 "image/jpeg" 和 "image/webp" 格式。
        let imgBase64Url = canvas.toDataURL('image/jpeg', 1);
        let imgFile = this.base64ToFile(imgBase64Url, '图片名称');
        console.log('🚀 ~ canvasImg ~ imgFile:', imgFile);
        //你的上传接口方法
        //let formData = new FormData();
        //formData.append('avatarfile', imgFile);
        //uploadAvatar(formData).then(response => {
        //console.log(window.location.origin + process.env.VUE_APP_BASE_API + response.imgUrl);
        });
      });
    },

效果
在这里插入图片描述
在这里插入图片描述

二.使用jspdf生成pdf并将图片添加进去

jsPDF中文文档并找不到啥需要的东西
在这里插入图片描述

npm install jspdf --save
import jsPDF from 'jspdf';

将uploadImg方法中上传图片部分换为转换成pdf并上传

 //点击上传按钮
    uploadImg() {
      html2canvas(this.$refs.yourDom, {
        allowTaint: true, //是否允许不同源的图片污染画布
        useCORS: true, //是否尝试使用 CORS 从服务器加载图片
        scale: 2, //用于渲染的比例,默认为浏览器设备像素比率。
      }).then(canvas => {
        // canvas.toDataURL(type, encoderOptions) 是 JavaScript 中用于将 <canvas> 元素的内容转换为数据 URL 的方法
        // type:指定输出的图像类型,默认为 "image/png"。也可以是 "image/jpeg" 或 "image/webp" 等格式。
        // encoderOptions:用于指定图像编码质量或压缩级别的参数(取值范围为 0-1),仅适用于 "image/jpeg" 和 "image/webp" 格式。
        let imgBase64Url = canvas.toDataURL('image/jpeg', 1);
        this.imgToPdf(canvas, imgBase64Url);
      });
    },
//图片转pdf
	imgToPdf(canvas, imgBase64Url) {
      let pdf = new jsPDF('p', 'pt', 'a4');
      pdf.addImage(imgBase64Url, 'JPEG', 0, 0, canvas.width * 0.2, canvas.height * 0.2);
      let pdfBlob = pdf.output('blob');
      let pdfFile = new File([pdfBlob], '文件名字.pdf', { type: 'application/pdf' });
      console.log('pdfFile', pdfFile);

      //你的上传接口方法
      //let formData = new FormData();
      //formData.append('avatarfile', pdfFile);
      //uploadAvatar(formData).then(response => {
        //console.log(window.location.origin + process.env.VUE_APP_BASE_API + response.imgUrl);
      //});
      
      //下载文件
      // pdf.save("文件名字.pdf");
    },

效果
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【Linux】自定义协议与序列化和反序列化

一、自定义协议 1.1 自定义报文格式 在前面的博客中&#xff0c;我们可以知道在TCP协议中&#xff0c;面向的是字节流&#xff1b;而UDP协议中面向的是数据报。因此&#xff0c;在手写简单的TCP和UDP服务器中&#xff0c;所使用的是接收函数和发送函数不同。因此&#xff0c;在…

docker images

docker 装好docker之后&#xff0c;先掌握一下docker启动与停止 docker启动关闭状态 systemctl 命令是系统服务管理器指令&#xff0c;它是 service 和 chkconfig 两个命令组合。 查看 docker 的启动状态 systemctl status docker关闭 docker systemctl stop docker启动 …

基于空间结构光场照明的三维单像素成像

单像素成像是一种新兴的计算成像技术。该技术使用不具备空间分辨能力的单像素探测器来获取目标物体或场景的空间信息。单像素探测器具有高的时间分辨率、光探测效率和探测带宽&#xff0c;因此单像素光学成像技术在散射、弱光等复杂环境下相较于传统面阵成像技术展现了很大优势…

A题 农村公交与异构无人机协同配送优化

1.1问题背景 农村地区的独特地理和社会结构带来了配送上的特殊挑战。复杂的地形&#xff0c;如山地和河流等自然障碍&#xff0c;使得道路建设困难重重&#xff0c;导致道路网络稀疏&#xff0c;而分散的配送点进一步增加了物流的复杂性。这些因素叠加&#xff0c;使得传统配送…

linux top命令介绍以及使用

文章目录 介绍 top 命令1. top 的基本功能2. 如何启动 top3. top 的输出解释系统概况任务和 CPU 使用情况内存和交换空间进程信息 4. 常用操作 总结查看逻辑CPU的个数查看系统运行时间 介绍 top 命令 top 是一个在类 Unix 系统中广泛使用的命令行工具&#xff0c;用于实时显示…

建模导论的最后一个视频笔记

建模的目的&#xff1a;解决贴合题意的问题&#xff0c;用合适的方法解决问题前提&#xff1a;理解题意&#xff0c;知道题目在说什么&#xff0c;前提的前提&#xff1a;了解题目的背景&#xff0c;知道题目这类问题的常见概念&#xff0c;了解这方面的知识如果是数据题&#…

常见的网络安全服务大全(汇总详解)

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene21#wechat_redirect 《网安面试指南》…

若楠带你初识OpenCV(4) -- 图像边缘检测

文章目录 OpenCV图像边缘检测sobel 算子1. x方向上的边缘2. 保存负值3. 取绝对值4. y方向上的边缘5. 加权运算不要双方向同时卷积读取猪猪侠查看效果 Scharr 算子Laplacian 算子 canny边缘检测优点理论步骤四部分1. 图像降噪2. 梯度计算3. 非极大值抑制4. 双阈值边界跟踪 示例应…

【QT | 开发环境搭建】windows系统(Win10)安装 QT 5.12.12 开发环境

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a; 本文未经允许…

WebStorm用Debug模式调试Vue项目

问题说明 开发前端代码时&#xff0c;一直很苦恼调试前端代码的麻烦。 简单的内容可以通过console.log()在控制台打印变量值&#xff0c;来验证预期结果。 涉及到稍复杂的逻辑&#xff0c;就需要在代码中侵入增加debugger&#xff0c;或者在浏览器中找到js文件&#xff0c;再手…

Linux 之 mysql-5.7.44 下载/安装(离线)

下载 官网 MySQL :: Download MySQL Community Server (Archived Versions) 安装 1.解压并放到指定目录&#xff08;/home/mysql&#xff09; tar -zxvf mysql-5.7.44-el7-x86_64.tar.gz 移动到指定安装位置&#xff08;我的&#xff1a;/home 下&#xff09; mv mysql-5.…

实操在聆思CSK6大模型开发板的英文评测SDK中自定义添加单词、短语、句子资源

引言 英文评测示例通过对用户语音输入的英文单词进行精准识别&#xff0c;提供 单词、短语、句子 三种类型&#xff0c;用户在选择好类型后&#xff0c;可根据屏幕上的提示进行语音输入&#xff0c;评测算法将对输入的英文语音进行精准识别&#xff0c;并对单词的发音、错读、漏…

Codeforces Round 970 (Div. 3)(ABCDEF)

Codeforces Round 970 (Div. 3) A:Sakurakos Exams 签到 题意:给定1,2的数量,判断是否能用加减符号使得这些1,2计算出0 void solve() {cin>>n>>m;if(n%2)cout<<"NO\n";else{if(m%20||n)cout<<"YES\n";else cout<<"…

作为前端,感受一下MemFire Cloud带来的魅力

作为一名前端开发者&#xff0c;你是否曾为后台开发的繁琐和复杂而头疼&#xff1f;是否想过只需要专注于前端界面&#xff0c;而所有的后端工作都能一键搞定&#xff1f;如果你有这些想法&#xff0c;那么MemFire Cloud 无疑会成为你开发路上的新神器。 什么是MemFire Cloud…

SpringBoot学习(8)RabbitMQ详解

RabbitMQ 即一个消息队列&#xff0c;主要是用来实现应用程序的异步和解耦&#xff0c;同时也能起到消息缓冲&#xff0c;消息分发的作用。 消息中间件最主要的作用是解耦&#xff0c;中间件最标准的用法是生产者生产消息传送到队列&#xff0c;消费者从队列中拿取消息并处理&…

搞定JavaScript异步原理,深入学习Promise

JS异步及Promise基础 一、从浏览器运行机制说起 来破案啦&#xff0c;常说的“多线程的浏览器、单线程的Javascript”到底是什么意思&#xff1f;单线程的Javascript是否真的需要抽身去计时、去发http请求&#xff1f;第一部分我们重新从浏览器运行机制开始认识一下JavaScript…

828华为云征文 | Flexus X实例与华为云EulerOS的Tomcat安装指南

文章目录 前言安全组设置操作步骤软件安装配置软件验证Tomcat安装是否成功 总结 前言 Tomcat是一个由Apache软件基金会开发并维护的免费、开源的Web应用服务器。它主要用于处理Java Servlet、JavaServer Pages&#xff08;JSP&#xff09;和JavaServer Pages Standard Tag Lib…

新增一个数组传递给后端

实现的效果&#xff1a; 页面 <div style"margin-bottom: 10px" v-if"totalPrice"><p style"font-weight: bolder;margin-bottom: 10px">支付计划<el-button type"text" size"small" click"addPayInf…

53 mysql pid 文件的创建

前言 接上一篇文章 mysql 启动过程中常见的相关报错信息 在 mysql 中文我们在 “service mysql start”, “service mysql stop” 经常会碰到 mysql.pid 相关的错误信息 比如 “The server quit without updating PID file” 我们这里来看一下 mysql 中 mysql.pid 文件的…

软件工程知识点总结(2):需求分析(一)——用例建模

1 软件项目开发流程&#xff1a; 需求分析→概要设计→详细设计→编码实施→测试→产品提 交→维护 2 系统必须做什么&#xff1f; 获取用户需求&#xff0c;从用户角度考虑&#xff0c;用户需要系统必须完成哪些工作&#xff0c;也就是对目 标系统提出完整、准确、清晰、具体…