当前位置:首页 > 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 实现屏幕共享的方法 使用 WebRTC 和 getDisplayMedia API 通过 navigator.mediaDevices.getDisplayMedia 捕获屏幕内容,结合 We…

vue实现适老化样式

vue实现适老化样式

Vue 实现适老化样式的关键方法 全局字体与字号调整 通过 CSS 变量或主题配置统一放大基础字号,建议正文不小于 18px,标题更大。在 App.vue 中设置全局样式: :root { --…

vue按钮实现截屏

vue按钮实现截屏

Vue 按钮实现截屏的方法 在 Vue 项目中实现截屏功能可以通过多种方式完成,以下是几种常见的方法: 使用 html2canvas 库 安装 html2canvas 库: npm insta…

vue实现文章锚点定位

vue实现文章锚点定位

实现文章锚点定位的方法 在Vue中实现文章锚点定位可以通过多种方式完成,以下是几种常见的方法: 使用原生HTML锚点 通过HTML的id属性和<a>标签的href属性实现锚点跳转。在V…

vue实现菜单栏锚点

vue实现菜单栏锚点

实现锚点菜单的基本思路 在Vue中实现菜单栏锚点功能,主要涉及两个方面:创建可跳转的锚点位置,以及菜单项的点击滚动控制。通过监听滚动事件可以高亮当前可见区域的对应菜单项。 创建页面锚点位置 在需要…

vue实现边框

vue实现边框

Vue 实现边框的方法 在 Vue 中实现边框效果可以通过多种方式完成,包括内联样式、CSS 类绑定、动态样式以及使用第三方 UI 库。以下是几种常见的实现方法。 内联样式绑定 使用 Vue 的 :…