当前位置:首页 > VUE

vue 实现pdf下载

2026-01-19 18:30:03VUE

Vue 实现 PDF 下载的方法

使用 jsPDF 库生成并下载 PDF

安装 jsPDF 库:

npm install jspdf

在 Vue 组件中使用 jsPDF

import { jsPDF } from "jspdf";

export default {
  methods: {
    generatePDF() {
      const doc = new jsPDF();
      doc.text("Hello Vue!", 10, 10);
      doc.save("document.pdf");
    }
  }
}

使用 pdf-lib 动态生成 PDF

安装 pdf-lib

npm install pdf-lib

示例代码:

import { PDFDocument, StandardFonts, rgb } from 'pdf-lib';

export default {
  methods: {
    async createPDF() {
      const pdfDoc = await PDFDocument.create();
      const page = pdfDoc.addPage();
      const { width, height } = page.getSize();

      const font = await pdfDoc.embedFont(StandardFonts.Helvetica);
      page.drawText('Vue PDF Download', {
        x: 50,
        y: height - 50,
        size: 30,
        font,
        color: rgb(0, 0, 0),
      });

      const pdfBytes = await pdfDoc.save();
      this.downloadPDF(pdfBytes, 'generated.pdf');
    },
    downloadPDF(pdfBytes, fileName) {
      const blob = new Blob([pdfBytes], { type: 'application/pdf' });
      const link = document.createElement('a');
      link.href = URL.createObjectURL(blob);
      link.download = fileName;
      link.click();
    }
  }
}

下载服务器上的 PDF 文件

如果 PDF 文件已存在于服务器:

export default {
  methods: {
    downloadServerPDF() {
      const link = document.createElement('a');
      link.href = '/path/to/file.pdf';
      link.download = 'downloaded.pdf';
      link.click();
    }
  }
}

使用 axios 下载二进制 PDF 数据

import axios from 'axios';

export default {
  methods: {
    async downloadPDF() {
      try {
        const response = await axios.get('/api/pdf', {
          responseType: 'blob'
        });
        const url = window.URL.createObjectURL(new Blob([response.data]));
        const link = document.createElement('a');
        link.href = url;
        link.setAttribute('download', 'file.pdf');
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      } catch (error) {
        console.error('Download failed:', error);
      }
    }
  }
}

使用 vue-pdf-embed 显示并下载 PDF

安装 vue-pdf-embed

npm install vue-pdf-embed

组件示例:

import VuePdfEmbed from 'vue-pdf-embed';

export default {
  components: {
    VuePdfEmbed
  },
  methods: {
    downloadPDF() {
      const pdfElement = this.$refs.pdfEmbed;
      pdfElement.download();
    }
  }
}

注意事项

确保服务器正确设置 CORS 头部以允许文件下载 对于大文件下载,考虑显示进度提示 移动端设备可能需要特殊处理下载逻辑 某些浏览器可能会阻止自动下载,需要用户交互触发

vue 实现pdf下载

标签: vuepdf
分享给朋友:

相关文章

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 在Vue项目中实现PDF功能通常涉及PDF生成、预览或下载。以下是几种常见实现方式: 使用vue-pdf库预览PDF 安装依赖: npm install vue-…

vue实现盖章

vue实现盖章

Vue 实现盖章功能 在Vue中实现盖章功能通常涉及前端UI交互,通过Canvas或SVG绘制印章,并允许用户拖拽或点击放置印章。以下是具体实现方法: 使用Canvas绘制印章 通过HTML5的…

vue 实现关闭

vue 实现关闭

Vue 实现关闭功能的方法 在Vue中实现关闭功能通常涉及组件销毁、模态框隐藏或路由跳转等场景。以下是几种常见实现方式: 销毁当前组件 使用v-if或v-show控制组件显示/隐藏,适用于局部组件:…

vue vnode实现

vue vnode实现

Vue VNode 实现原理 VNode(Virtual Node)是 Vue 的核心概念之一,用于描述真实 DOM 的轻量级虚拟表示。VNode 的实现涉及以下关键点: VNode 的基本结构…

vue筛选实现

vue筛选实现

Vue 筛选实现方法 使用计算属性实现筛选 计算属性是 Vue 中实现数据筛选的常用方式。通过定义一个计算属性,可以根据输入的条件动态过滤数据。 <template> <di…

vue实现active

vue实现active

Vue 实现 active 状态的方法 在 Vue 中实现 active 状态可以通过以下几种方式实现,具体取决于使用场景和需求。 使用 v-bind:class 动态绑定类名 通过 v-bind…