当前位置:首页 > 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');
    }
  }
}

模板部分:

vue 实现导出pdf

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

使用浏览器打印功能

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

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

CSS 优化打印样式:

vue 实现导出pdf

@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();
    }
  }
}

模板部分:

<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实现tab换行

vue实现tab换行

Vue实现Tab切换的常见方法 使用Vue实现Tab切换功能可以通过多种方式完成,以下是几种常见的方法: 动态组件结合v-if或v-show 通过v-if或v-show控制不同Tab内容的显示与隐…

vue实现轮询

vue实现轮询

实现轮询的基本方法 在Vue中实现轮询可以通过setInterval或setTimeout配合递归调用完成。轮询通常用于定期向服务器请求数据更新。 使用setInterval的简单示例: data…

vue实现modal

vue实现modal

Vue 实现 Modal 弹窗组件 使用 Vue 实现 Modal 弹窗组件可以通过多种方式,包括原生 Vue 组件、第三方库或自定义指令。以下是几种常见方法: 原生 Vue 组件实现 创建一个基础…

vue实现flvvideo

vue实现flvvideo

vue-flv-player 实现 FLV 视频播放 安装依赖包 npm install flv.js vue-flv-player 基础组件引入 <template> <v…

vue 实现modal

vue 实现modal

Vue 实现 Modal 的方法 使用 Vue 原生组件 通过 Vue 的组件系统可以轻松实现 Modal。创建一个可复用的 Modal 组件,通过 props 控制显示与隐藏。 <templ…

vue实现slidetoggle

vue实现slidetoggle

Vue 实现 SlideToggle 效果 SlideToggle 是一种常见的交互效果,元素以滑动方式展开或收起。以下是几种实现方法: 使用 CSS Transition 和 v-show 通过…