当前位置:首页 > VUE

vue 实现导出pdf

2026-02-11 01:10:01VUE

Vue 实现导出 PDF 的方法

使用 html2pdf.js 库

安装 html2pdf.js 库:

npm install html2pdf.js

在 Vue 组件中引入并使用:

import html2pdf from 'html2pdf.js'

export default {
  methods: {
    exportToPDF() {
      const element = document.getElementById('pdf-content')
      const opt = {
        margin: 10,
        filename: 'document.pdf',
        image: { type: 'jpeg', quality: 0.98 },
        html2canvas: { scale: 2 },
        jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' }
      }
      html2pdf().from(element).set(opt).save()
    }
  }
}

模板部分:

<template>
  <div>
    <div id="pdf-content">
      <!-- 这里是要导出为 PDF 的内容 -->
      <h1>PDF 导出示例</h1>
      <p>这是一段测试内容</p>
    </div>
    <button @click="exportToPDF">导出 PDF</button>
  </div>
</template>

使用 jsPDF 和 html2canvas

安装依赖:

npm install jspdf html2canvas

实现代码:

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

export default {
  methods: {
    async generatePDF() {
      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
      const pageHeight = 295
      const imgHeight = canvas.height * imgWidth / canvas.width
      let heightLeft = imgHeight
      let position = 0

      pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight)
      heightLeft -= pageHeight

      while (heightLeft >= 0) {
        position = heightLeft - imgHeight
        pdf.addPage()
        pdf.addImage(imgData, 'PNG', 0, position, imgWidth, imgHeight)
        heightLeft -= pageHeight
      }

      pdf.save('document.pdf')
    }
  }
}

使用 vue-html2pdf 插件

安装插件:

npm install vue-html2pdf

使用示例:

import VueHtml2pdf from 'vue-html2pdf'

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

模板部分:

vue 实现导出pdf

<template>
  <div>
    <vue-html2pdf
      ref="html2Pdf"
      :show-layout="false"
      :float-layout="true"
      :enable-download="true"
      :preview-modal="true"
      filename="document"
      :paginate-elements-by-height="1400"
      :pdf-quality="2"
      pdf-format="a4"
      pdf-orientation="portrait"
    >
      <section slot="pdf-content">
        <!-- PDF 内容 -->
        <h1>PDF 导出示例</h1>
        <p>使用 vue-html2pdf 插件</p>
      </section>
    </vue-html2pdf>
    <button @click="generateReport">生成 PDF</button>
  </div>
</template>

注意事项

  • 确保要导出的内容已经渲染完成
  • 对于复杂布局,可能需要调整 html2canvas 的配置
  • 中文支持可能需要额外配置字体
  • 分页处理需要考虑内容高度
  • 图片资源需要确保跨域问题已解决

以上方法提供了不同复杂度的 PDF 导出方案,可以根据项目需求选择合适的实现方式。

标签: vuepdf
分享给朋友:

相关文章

vue请求实现进度条

vue请求实现进度条

实现请求进度条的方法 在Vue中实现请求进度条可以通过多种方式完成,常见的有使用第三方库如axios结合nprogress或自定义进度条组件。以下是几种实现方法: 使用axios和nprogress…

vue 实现关闭

vue 实现关闭

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

vue实现cs

vue实现cs

Vue 实现 CS(Client-Side)渲染的常见方法 Vue.js 是一个用于构建用户界面的渐进式框架,默认采用客户端渲染(CSR)。以下是几种常见的实现方式: 使用 Vue CLI 创建项目…

vue单选实现

vue单选实现

Vue 单选实现 在 Vue 中实现单选功能可以通过多种方式完成,以下是几种常见的方法: 使用 v-model 绑定单选按钮 通过 v-model 绑定一个变量,可以实现单选效果。当用户选择不同的选…

vue实现路径

vue实现路径

Vue 实现路径的方法 在 Vue 中实现路径管理通常涉及 Vue Router 的使用,以下是一些常见的实现方法: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Route…

vue拼图实现

vue拼图实现

实现 Vue 拼图游戏的方法 使用 Vue 组件和动态数据绑定 创建一个 Vue 组件来管理拼图的状态和逻辑。通过 v-for 动态渲染拼图块,利用 v-bind 绑定样式和位置。拼图块的数据可以存储…