当前位置:首页 > VUE

vue 实现导出pdf

2026-03-08 00:54:43VUE

Vue 实现导出 PDF 的方法

在 Vue 项目中导出 PDF 可以通过多种方式实现,常见的有使用 html2canvasjspdf 库,或直接调用浏览器打印功能。以下是几种具体实现方法:

使用 html2canvas 和 jspdf 生成 PDF

安装依赖库:

npm install html2canvas jspdf

在 Vue 组件中引入并使用:

import html2canvas from 'html2canvas';
import jsPDF from 'jspdf';

export default {
  methods: {
    async exportToPDF() {
      const element = document.getElementById('pdf-content');
      const canvas = await html2canvas(element);
      const imgData = canvas.toDataURL('image/png');
      const pdf = new jsPDF('p', 'mm', 'a4');
      const imgWidth = 210; // A4 宽度 (mm)
      const imgHeight = (canvas.height * imgWidth) / canvas.width;
      pdf.addImage(imgData, 'PNG', 0, 0, imgWidth, imgHeight);
      pdf.save('export.pdf');
    }
  }
}

模板部分:

<template>
  <div>
    <div id="pdf-content">
      <!-- 需要导出的内容 -->
    </div>
    <button @click="exportToPDF">导出 PDF</button>
  </div>
</template>

使用浏览器打印功能

直接调用浏览器的打印 API 实现 PDF 导出(需用户手动选择“保存为 PDF”):

methods: {
  printPDF() {
    window.print();
  }
}

CSS 优化打印样式:

@media print {
  body * {
    visibility: hidden;
  }
  #pdf-content, #pdf-content * {
    visibility: visible;
  }
  #pdf-content {
    position: absolute;
    left: 0;
    top: 0;
  }
}

使用第三方库 vue-html2pdf

安装 vue-html2pdf

npm install vue-html2pdf

在组件中使用:

import VueHtml2pdf from 'vue-html2pdf';

export default {
  components: { VueHtml2pdf },
  methods: {
    generatePDF() {
      this.$refs.html2Pdf.generatePdf();
    }
  }
}

模板部分:

vue 实现导出pdf

<template>
  <div>
    <vue-html2pdf
      ref="html2Pdf"
      :filename="'export.pdf'"
      :enable-download="true"
    >
      <div slot="content">
        <!-- 需要导出的内容 -->
      </div>
    </vue-html2pdf>
    <button @click="generatePDF">导出 PDF</button>
  </div>
</template>

注意事项

  1. 内容溢出:确保导出的内容宽度不超过 PDF 页面宽度,否则会被截断。
  2. 分页处理:长内容需手动分页,可通过计算高度动态分割。
  3. 图片跨域:若内容包含跨域图片,需配置 html2canvasuseCORS: true
  4. 字体支持:中文字体需在 jspdf 中手动注册或使用图片形式渲染。

以上方法可根据实际需求选择,html2canvas + jspdf 适合复杂内容,浏览器打印适合简单场景,vue-html2pdf 提供了更集成的解决方案。

标签: vuepdf
分享给朋友:

相关文章

vue循环数组实现

vue循环数组实现

vue循环数组的实现方法 在Vue中循环数组主要通过v-for指令实现,以下是几种常见用法: 基本数组循环 使用v-for指令遍历数组,可以通过(item, index)的语法获取当前项和索引值:…

vue 实现权限

vue 实现权限

Vue 实现权限控制的方法 在 Vue 项目中实现权限控制通常涉及前端路由、组件和按钮级别的权限管理。以下是几种常见的实现方式: 路由权限控制 通过路由守卫实现权限验证,过滤用户无权访问的路由:…

vue el 实现

vue el 实现

Vue 中使用 Element UI (el) 的实现方法 Element UI 是一个基于 Vue 的组件库,提供丰富的 UI 组件,常用于快速构建企业级中后台产品。以下介绍 Vue 项目中集成和使…

vue实现粘贴

vue实现粘贴

Vue 实现粘贴功能的方法 在 Vue 中实现粘贴功能通常涉及监听粘贴事件并处理剪贴板数据。以下是几种常见的实现方式: 监听原生粘贴事件 通过 @paste 指令或原生 addEventListen…

vue 实现树状

vue 实现树状

Vue 实现树状结构的方法 递归组件实现树状结构 递归组件是 Vue 中实现树状结构的常见方法。通过组件自身调用自身,可以轻松构建多层级树状结构。 <template> <ul…

vue实现Siri

vue实现Siri

Vue 实现 Siri 风格语音交互 实现类似 Siri 的语音交互功能需要结合语音识别、语音合成和前端交互逻辑。Vue 作为前端框架,可以很好地管理这些功能的交互状态。 语音识别集成 使用 Web…