VUE前端,小程序,APP签名盖章
签名盖章功能就是把图片(签名或盖章)
与背景图片(需要签名的文件,如PDF)
合并起来,生成一个新的图片
此功能的开发流程顺序:
- 显示背景PDF
- 操作PDF:手势缩放,回到顶部,上下翻页
- 手绘签字功能
- 显示签章图片
- 操作签章图片:拖动位置,修改大小,删除,确定
- 合并背景与签章,生成结果文件
详细开发流程
显示和操作PDF:
我使用的是pdfh5
引入
import Pdfh5 from "pdfh5"
import "pdfh5/css/pdfh5.css"
使用:url等同于img的src
这里我设置了maxZoom:1,意思是禁止缩放,默认为最大缩放3倍
this.pdfh5 = new Pdfh5("#preViewPdf", {
pdfurl: url,
maxZoom:1
})
元素
<div style="overflow: auto;height: 95%;">
<div id="preViewPdf"></div>
</div>
h5pdf自带的页码和回到首页功能
手绘签字功能:
使用的是vue-esign
引入
// import vueEsign from 'vue-esign' //使用库
import vueEsign from "@/components/vue-esign/src/index";//使用本地
使用
components: {
vueEsign
},
元素
<vueEsign ref="esign" :width="windowWidth" style="width: 100% !important;height:83vh !important;"
:isCrop="isCrop" :lineWidth="lineWidth" :lineColor="lineColor" :bgColor.sync="bgColor"></vueEsign>
vue-esign提供清空和保存功能:
this.$refs.esign.reset();//清空
this.$refs.esign.generate().then(res => {//保存
this.handleReset();
this.signSuccess(res);//res为base64文件
}).catch(err => {
console.log(err)
// this.$message.error('请签名之后提交!')
that.$toast.success("请签名之后提交");
})
},
此外,该控件还有画笔大小等设置功能
示例:
显示和操作签章图片:
代码比较长,这里不贴了
因为移动端和PC端不兼容,写了两个拖动代码
也有改图片大小和删除图片功能
总之就是一个简单的拖动图片和设置大小功能,示例:
合并背景与签章
使用的是html2canvas
引入
import html2canvas from "@/utils/html2canvas.js";
使用(删除了保存到后端接口的代码)
html2canvas(document.querySelector(".pdfViewer"), {
// 以下字段可选
// width: 490, // canvas宽度
// height: 240, // canvas高度
// x: 0, // x坐标
// y: 0, // y坐标
foreignObjectRendering: true, // 是否在浏览器支持的情况下使用ForeignObject渲染
useCORS: true, // 是否尝试使用CORS从服务器加载图像
async: false, // 是否异步解析和呈现元素
// 以下字段必填
background: "#ffffff", // 一定要添加背景颜色,否则出来的图片,背景全部都是透明的
scale: 2, // 处理模糊问题
dpi: 300, // 处理模糊问题
onrendered: function (canvas) {
// https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/toDataURL
// let url = canvas.toDataURL('image/png', 1.0)
let url = canvas.toDataURL();
console.log(url);
// },
// });
// html2Canvas(document.querySelector('.pdfViewer'), {
// allowTaint: true
// }).then(function (canvas) {
let contentWidth = canvas.width
let contentHeight = canvas.height
let pageHeight = (contentWidth / 592.28) * 841.89
let leftHeight = contentHeight
let position = 0
let imgWidth = 595.28
let imgHeight = (592.28 / contentWidth) * contentHeight
let pageData = canvas.toDataURL('image/jpeg', 1.0)
let PDF = new JsPDF('', 'pt', 'a4')
if (leftHeight < pageHeight) {
PDF.addImage(pageData, 'JPEG', 0, 0, imgWidth, imgHeight)
} else {
while (leftHeight > 0) {
PDF.addImage(pageData, 'JPEG', 0, position, imgWidth, imgHeight)
leftHeight -= pageHeight
position -= 841.89
if (leftHeight > 0) {
PDF.addPage()
}
}
}
// PDF.save(title + '.pdf')
// let file = that.base64ConvertFile(PDF.output("dataurlstring"),"test.pdf");
pageData = PDF.output("dataurlstring");
// console.log(pageData);
// that.showCopperDialog = false;
// // //调用
// var arr = pageData.split(',');
var blob = that.dataURLtoBlob(pageData);
// const contentType = "image/jpeg"; // 文件类型
const contentType = 'application/pdf'; // 文件类型
const file = new File([blob], "pdf.pdf", {
type: contentType,
lastModified: Date.now()
});
let fileFormData = new FormData();
fileFormData.append("file", file);
},
}
)
html2canvas的保存注意事项:
页面需全部显示,不能又缩放
页面不能滚动到下面或者右边,要再保存前设置页面滚动复原
// window.pageYoffset = 0;
// console.log(document.querySelector(".pdfViewer").scrollTop+=10);
// console.log(document.querySelector(".pdfViewer").parentElement.scrollTop+=10);
//防止截图不全
document.querySelector(".pdfViewer").parentElement.parentElement.scrollTop = 0
document.querySelector(".pdfViewer").parentElement.parentElement.scrollLeft = 0
代码:gitee地址:https://gitee.com/jiongjiongys/sigz
407a4f37-fd09-4b00-873c-0eaa1ca3b473
VUE前端,小程序,APP签名盖章的更多相关文章
- Java生鲜电商平台-优惠券功能设计与开发(小程序/APP)
Java生鲜电商平台-优惠券功能设计与开发(小程序/APP) 说明:Java生鲜电商平台-优惠券功能设计与开发(小程序/APP) 目录 1.项目背景与需求分析 2.需求目的与功能点列表 3.业务逻辑 ...
- 小程序app.js小结
小程序app.js app.js import { ApiUrl } from 'utils/apiurl.js'; import { httpReq } from 'utils/http.js'; ...
- 基于uniapp自定义Navbar+Tabbar组件「兼容H5+小程序+App端Nvue」
uni-app跨端自定义navbar+tabbar组件|沉浸式导航条|仿咸鱼凸起标签栏 在跨端项目开发中,uniapp是个不错的框架.采用vue.js和小程序语法结构,使得入门开发更容易.拥有非常丰富 ...
- 【实战】SpringBoot+uniapp+uview打造H5+小程序+APP入门学习的聊天小项目
JavaDog Chat v1.0.0 基于SpringBoot+uniapp简单通讯聊天软件 项目介绍 JavaDog Chat 简单通讯聊天软件是基于SpringBoot+MybatisPlus+ ...
- 微信小程序APP生命周期
小程序APP生命周期需要先从app.js这个文件开始,App() 必须在 app.js 中调用,必须调用且只能调用一次,app.js中定义了一些应用的生命周期函数 onLaunch----当小程序初始 ...
- 微信小程序-APP生命周期与运行机制
QQ讨论群:785071190 开发微信小程序之前需要先了解微信小程序运行机制以及其生命周期,小程序APP生命周期需要先从app.js这个文件开始. 阅读过"微信小程序-代码构成" ...
- Java生鲜电商平台-关于学习生鲜电商平台的思考(小程序/APP)
Java生鲜电商平台-关于学习生鲜电商平台的思考(小程序/APP) 说明:最近群里面的一个网友问的一个问题,让我陷入了深思,他问的问题很基础也很真实,"大佬,你们是怎么学习的呢?" ...
- vue制作小程序--mpvue
mpvue是一个使用 Vue.js 开发小程序的前端框架 http://mpvue.com/ sass的使用 https://segmentfault.com/q/1010000014194954 n ...
- 基于uni-app全端弹框组件uaPopup「兼容h5+小程序+app端|nvue」
uniapp兼容多端自定义模态弹框组件UAPopup ua-popup 一款轻量级的uniapp自定义弹窗组件.汇集了android.ios和微信弹窗效果(msg消息.alert提示框.dialog对 ...
- 微信小程序 app.json 配置
我们使用app.json文件来对微信小程序进行全局配置,决定页面文件的路径.窗口表现.设置网络超时时间.设置多 tab 等. 以下是一个包含了所有配置选项的简单配置app.json : { " ...
随机推荐
- 如何在 PostgreSQL 中运行 TLS 回归测试
概述 本文将分享一个简单的步骤,介绍如何在 PostgreSQL 中运行 SSL/TLS 回归测试. Postgres 回归测试 每当我们想要添加新功能或进行修复时,都应该运行 PostgreSQL ...
- docker中 启动所有的容器命令
docker中 启动所有的容器命令 docker start $(docker ps -a | awk '{ print $1}' | tail -n +2) docker中 关闭所有的容器命令 ...
- Delphi 时间控制窗口标题栏文字或任务栏标题文字滚动
1.定义一个全局变量保存显示到标题栏的字符串,strScroll: Widestring = '风行天下 - By WindSon '; 2.添加一个Timer控件,设置属性Interval := 3 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 33 期(2025年4.1-4.6)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- FREERTOS指令测试的思考
采用freertos编程后,有必要增加指令测试的功能: 1.便于对于软件各个子模块或功能点进行测试. 2.便于对硬件各个功能点是否正常进行测试. 在裸机编程中,我们一般使用串口进行运行数据的打 ...
- vue路由params传参时出现undefined
1.问题: 使用params方式传参时(参数不显示的方式) 获取参数时,参数undefined 2.解决: push时请使用name,不要使用path(路由的params对象使用,必须通过路由名nam ...
- require、include、require_once和use的区别/命名空间的使用方法
1.require.include require.include都是文件包含,不同的是require语句会输出错误信息,并且立即终止脚本处理.而include语句在没有找到文件时则会输出警告,不会终 ...
- 树形DP学习总结
学完换根不久后发现不太熟了,赶紧写篇总结复习一下 \(\\\\\) 树形DP,即在树上进行DP的操作. 例题1:luogu P1352 没有上司的舞会 题目描述 某大学有 \(n\) 个职员,编号为 ...
- 图解Spring源码2-Spring Bean元数据体系与Spring容器
>>>点击去看B站配套视频<<< 系列文章目录和关于我 1. 从一个例子开始 小陈申请加盟咖啡店后,小陈收到总部寄来的<开店规格单>.这份文件允许每家分 ...
- JS函数调用的5种模式
函数是经常会用的工具, 这里总结一下关于在 js 中的 5种函数调用的模式如下: <!DOCTYPE html> <html lang="en"> < ...