当前位置:首页 > VUE

vue实现pdf盖章

2026-01-17 17:25:23VUE

实现PDF盖章功能(Vue版)

依赖库准备 安装pdf-libfile-saver库用于PDF处理和文件下载:

npm install pdf-lib file-saver

核心实现步骤

获取PDF文件 通过文件输入框或API获取PDF文件,转换为ArrayBuffer:

const fileInput = document.getElementById('pdf-upload');
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();

加载PDF文档 使用pdf-lib加载PDF并获取第一页:

vue实现pdf盖章

import { PDFDocument } from 'pdf-lib';

const pdfDoc = await PDFDocument.load(arrayBuffer);
const pages = pdfDoc.getPages();
const firstPage = pages[0];

添加印章图像 准备印章图片(PNG格式),嵌入到PDF中:

const stampImage = await fetch('/stamp.png').then(res => res.arrayBuffer());
const stampPngImage = await pdfDoc.embedPng(stampImage);

定位并绘制印章 在指定位置绘制印章(示例为右下角):

vue实现pdf盖章

const { width, height } = firstPage.getSize();
firstPage.drawImage(stampPngImage, {
  x: width - 150, // 距右侧150px
  y: 50,          // 距底部50px
  width: 100,
  height: 100
});

保存并导出PDF 生成修改后的PDF并触发下载:

const modifiedPdf = await pdfDoc.save();
import { saveAs } from 'file-saver';
saveAs(new Blob([modifiedPdf]), 'stamped-document.pdf');

完整组件示例

<template>
  <div>
    <input type="file" @change="handleFileUpload" accept=".pdf" />
    <button @click="addStamp">添加印章</button>
  </div>
</template>

<script>
import { PDFDocument } from 'pdf-lib';
import { saveAs } from 'file-saver';

export default {
  data() {
    return {
      pdfData: null
    };
  },
  methods: {
    async handleFileUpload(event) {
      this.pdfData = await event.target.files[0].arrayBuffer();
    },
    async addStamp() {
      if (!this.pdfData) return;

      const pdfDoc = await PDFDocument.load(this.pdfData);
      const stampImg = await this.loadStampImage();
      const page = pdfDoc.getPages()[0];

      page.drawImage(stampImg, {
        x: page.getWidth() - 150,
        y: 50,
        width: 100,
        height: 100
      });

      const modifiedPdf = await pdfDoc.save();
      saveAs(new Blob([modifiedPdf]), 'stamped.pdf');
    },
    async loadStampImage() {
      const response = await fetch('/stamp.png');
      return await pdfDoc.embedPng(await response.arrayBuffer());
    }
  }
};
</script>

注意事项

  • 印章图片建议使用透明背景的PNG格式
  • 坐标系统原点(0,0)位于页面左下角
  • 对于多页PDF需要遍历所有页面进行处理
  • 服务端渲染场景需将文件操作放在客户端生命周期钩子中

标签: vuepdf
分享给朋友:

相关文章

vue实现前端

vue实现前端

Vue 实现前端的核心方法与步骤 安装 Vue 项目 使用 Vue CLI 或 Vite 创建项目。Vue CLI 是传统构建工具,Vite 是新一代轻量级工具。 npm init vue@la…

vue 实现href

vue 实现href

Vue 实现 href 的方法 在 Vue 中实现 href 功能可以通过多种方式,具体取决于需求场景。以下是几种常见的方法: 使用 <a> 标签 直接使用 HTML 的 <a&g…

vue实现分步

vue实现分步

Vue 实现分步功能 在 Vue 中实现分步功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 通过动态组件切换不同的步骤内容,结合 v-if 或 component 标签实现分步逻辑。…

vue实现tip

vue实现tip

Vue实现Tooltip的方法 使用Vue实现Tooltip可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML的title属性 在Vue模板中直接使用HTML的title属性是最简单的实…

vue系统实现

vue系统实现

Vue 系统实现的关键步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目,安装核心依赖(如 Vue 3、Vue Router、Pinia)。配置开发环境(如 ESLint、Prett…

vue实现settimeout

vue实现settimeout

在 Vue 中实现 setTimeout Vue 中可以通过 JavaScript 原生的 setTimeout 方法实现延时操作,但需要注意结合 Vue 的响应式特性和生命周期管理。以下是几种常见实…