当前位置:首页 > VUE

vue实现文件电子签名

2026-01-23 17:00:24VUE

实现文件电子签名的基本步骤

安装依赖库 需要使用signature_pad库实现手写签名功能,通过npm或yarn安装:

npm install signature_pad
# 或
yarn add signature_pad

创建签名组件 新建一个Vue组件(如SignaturePad.vue),引入signature_pad并初始化画布:

<template>
  <div>
    <canvas ref="signatureCanvas" width="400" height="200"></canvas>
    <button @click="clearSignature">清除</button>
    <button @click="saveSignature">保存</button>
  </div>
</template>

<script>
import SignaturePad from 'signature_pad';

export default {
  mounted() {
    this.signaturePad = new SignaturePad(this.$refs.signatureCanvas);
  },
  methods: {
    clearSignature() {
      this.signaturePad.clear();
    },
    saveSignature() {
      const signatureData = this.signaturePad.toDataURL('image/png');
      this.$emit('save', signatureData);
    }
  }
};
</script>

文件上传与签名绑定

文件上传组件 创建文件上传组件并绑定签名数据:

vue实现文件电子签名

<template>
  <div>
    <input type="file" @change="handleFileUpload" accept=".pdf,.doc,.docx" />
    <SignaturePad @save="handleSignatureSave" />
    <button @click="submit">提交签名文件</button>
  </div>
</template>

<script>
export default {
  data() {
    return {
      file: null,
      signature: null
    };
  },
  methods: {
    handleFileUpload(event) {
      this.file = event.target.files[0];
    },
    handleSignatureSave(signatureData) {
      this.signature = signatureData;
    },
    submit() {
      const formData = new FormData();
      formData.append('file', this.file);
      formData.append('signature', this.signature);
      // 调用API上传数据
    }
  }
};
</script>

签名图片叠加到文件

后端处理建议 若需将签名图片叠加到文件(如PDF),后端可使用以下库:

  • Python: PyPDF2 + reportlab
  • Node.js: pdf-lib + canvas

示例Node.js代码片段:

vue实现文件电子签名

const { PDFDocument, rgb } = require('pdf-lib');
const fs = require('fs');

async function addSignatureToPDF(pdfPath, signaturePath, outputPath) {
  const pdfBytes = fs.readFileSync(pdfPath);
  const pdfDoc = await PDFDocument.load(pdfBytes);
  const pages = pdfDoc.getPages();
  const firstPage = pages[0];

  const signatureImage = await pdfDoc.embedPng(fs.readFileSync(signaturePath));
  firstPage.drawImage(signatureImage, {
    x: 50,
    y: 50,
    width: 150,
    height: 75,
  });

  const modifiedPdf = await pdfDoc.save();
  fs.writeFileSync(outputPath, modifiedPdf);
}

增强功能实现

签名验证 可通过以下方式增强安全性:

  1. 添加时间戳:签名时记录UTC时间并一起上传
  2. 生成哈希:使用crypto-js对签名数据生成SHA256哈希
    
    import SHA256 from 'crypto-js/sha256';

const signatureHash = SHA256(signatureData).toString();


移动端适配
添加触摸事件支持:
```vue
<template>
  <canvas 
    ref="signatureCanvas"
    @mousedown="handleStart"
    @mousemove="handleMove"
    @mouseup="handleEnd"
    @touchstart="handleStart"
    @touchmove="handleMove"
    @touchend="handleEnd"
  ></canvas>
</template>

注意事项

  • 画布尺寸应固定比例避免变形
  • 签名数据建议转换为Base64传输
  • 重要文件需结合后端验证签名真实性
  • 考虑添加法律声明文本到签名区域

分享给朋友:

相关文章

如何编译react文件

如何编译react文件

编译 React 文件的方法 使用 Create React App (CRA) Create React App 是官方推荐的快速搭建 React 项目的工具,内置了 Babel 和 Webpack…

vue 实现文件地址

vue 实现文件地址

Vue 实现文件下载功能 在Vue中实现文件下载功能通常可以通过前端直接触发下载或通过后端API返回文件流。以下是几种常见方法: 前端直接下载(适用于公开URL) 对于已知的公开文件URL,可以直接…

vue如何实现文件下载

vue如何实现文件下载

Vue 实现文件下载的方法 使用 <a> 标签下载 通过动态创建 <a> 标签并设置 download 属性实现文件下载。适用于已知文件 URL 或 Blob 对象的情况。…

vue实现word文件预览

vue实现word文件预览

vue实现word文件预览的方法 在Vue项目中实现Word文件预览,可以通过以下几种方式: 使用mammoth.js库 mammoth.js是一个将.docx文件转换为HTML的JavaScrip…

vue实现各类文件预览

vue实现各类文件预览

文件预览实现方案 在Vue中实现文件预览功能需要根据文件类型选择不同的技术方案。以下是常见文件类型的预览方法: 图片文件预览 使用HTML5的FileReader API读取图片文件并显示: &l…

React如何下载csv文件

React如何下载csv文件

使用React下载CSV文件的方法 方法1:使用Blob和URL.createObjectURL 创建一个Blob对象包含CSV数据,生成下载链接并触发点击事件。 const downloa…