当前位置:首页 > VUE

vue 实现导出pdf

2026-03-28 11:12:04VUE

Vue 实现导出 PDF 的方法

使用 html2pdf.js 库

安装 html2pdf.js:

npm install html2pdf.js

在 Vue 组件中引入并使用:

import html2pdf from 'html2pdf.js';

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

使用 jsPDF 和 html2canvas

安装依赖:

npm install jspdf html2canvas

在 Vue 组件中实现:

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

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

使用 vue-html2pdf 插件

安装插件:

npm install vue-html2pdf

在 Vue 组件中使用:

import VueHtml2pdf from 'vue-html2pdf';

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

模板部分:

<vue-html2pdf
  ref="html2Pdf"
  :filename="filename"
  :pdf-quality="2"
  :enable-download="true"
>
  <div slot="pdf-content">
    <!-- 要导出的内容 -->
  </div>
</vue-html2pdf>
<button @click="generateReport">导出 PDF</button>

注意事项

  • 确保导出的内容在 DOM 中可见
  • 对于复杂布局,可能需要调整 html2canvas 的 scale 参数
  • 中文支持可能需要引入额外的字体
  • 大文档导出可能需要优化性能

中文支持方案

对于需要支持中文的情况,可以在 jsPDF 中加载中文字体:

const pdf = new jsPDF();
pdf.addFileToVFS('NotoSansSC-Regular.ttf', fontData);
pdf.addFont('NotoSansSC-Regular.ttf', 'NotoSansSC', 'normal');
pdf.setFont('NotoSansSC');

服务器端生成方案

对于更复杂的 PDF 生成需求,可以考虑:

vue 实现导出pdf

  • 使用 Puppeteer 在服务器端生成
  • 调用专业的 PDF 生成 API
  • 使用 PDFKit 等库进行编程式生成

标签: vuepdf
分享给朋友:

相关文章

vue实现密码

vue实现密码

Vue 密码输入组件实现 基础密码输入框实现 使用 Vue 的 v-model 指令绑定数据,并通过 type="password" 设置输入类型为密码: <template> &…

vue 实现直播

vue 实现直播

Vue 实现直播的基本方法 在Vue中实现直播功能,通常需要结合WebRTC、RTMP或HLS等技术。以下是几种常见的实现方式: 使用WebRTC实现实时直播 WebRTC适合低延迟的实时直播场景,…

vue 实现图钉

vue 实现图钉

实现图钉效果的步骤 在Vue中实现图钉(固定位置)效果,可以通过CSS的position: sticky属性或监听滚动事件动态修改元素样式。以下是两种常见方法: 方法一:使用CSS的position…

vue实现反转

vue实现反转

实现数组反转 在Vue中反转数组可以通过多种方式实现,以下是几种常见方法: 使用JavaScript原生reverse方法 // 在methods中定义方法 methods: { revers…

vue  实现分页

vue 实现分页

实现分页的基本思路 在Vue中实现分页通常需要结合后端API返回的数据和前端的分页组件。分页的核心逻辑包括计算总页数、处理当前页码变化以及触发数据请求。 分页组件示例 使用Element UI的分页…

vue实现spa

vue实现spa

Vue 实现 SPA(单页应用)的步骤 创建 Vue 项目 使用 Vue CLI 快速初始化一个 Vue 项目,确保安装了 Vue Router 作为路由管理工具。运行以下命令创建项目: vue c…