当前位置:首页 > VUE

vue实现PDF导出

2026-02-19 13:58:50VUE

使用 vue-pdf 库导出 PDF

安装 vue-pdf 库

npm install @tboerc/vue-pdf --save

在组件中引入并使用

import { VuePdf } from '@tboerc/vue-pdf';

export default {
  components: {
    VuePdf
  },
  methods: {
    exportPDF() {
      this.$refs.pdfComponent.download('filename.pdf');
    }
  }
}

模板中使用

<vue-pdf ref="pdfComponent" :src="pdfSource"></vue-pdf>
<button @click="exportPDF">导出PDF</button>

使用 jsPDF 库生成 PDF

安装 jsPDF

npm install jspdf --save

基本使用方法

import jsPDF from 'jspdf';

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

添加图片和样式

const doc = new jsPDF();
doc.setFontSize(16);
doc.text('标题', 105, 15, { align: 'center' });
doc.addImage(imageData, 'JPEG', 15, 40, 180, 160);

使用 html2canvas 和 jsPDF 结合导出 HTML

安装依赖

npm install html2canvas jspdf --save

实现方法

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

export default {
  methods: {
    exportHTMLToPDF() {
      const element = document.getElementById('content-to-export');

      html2canvas(element).then(canvas => {
        const imgData = canvas.toDataURL('image/png');
        const pdf = new jsPDF('p', 'mm', 'a4');
        const imgProps = pdf.getImageProperties(imgData);
        const pdfWidth = pdf.internal.pageSize.getWidth();
        const pdfHeight = (imgProps.height * pdfWidth) / imgProps.width;

        pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight);
        pdf.save('export.pdf');
      });
    }
  }
}

使用 pdfmake 客户端生成 PDF

安装 pdfmake

npm install pdfmake --save

基本使用示例

import pdfMake from 'pdfmake/build/pdfmake';
import pdfFonts from 'pdfmake/build/vfs_fonts';

pdfMake.vfs = pdfFonts.pdfMake.vfs;

export default {
  methods: {
    createPDF() {
      const docDefinition = {
        content: [
          { text: 'PDF标题', style: 'header' },
          '这是正文内容...'
        ],
        styles: {
          header: {
            fontSize: 18,
            bold: true
          }
        }
      };

      pdfMake.createPdf(docDefinition).download('document.pdf');
    }
  }
}

服务器端生成 PDF

使用 axios 请求服务器

vue实现PDF导出

import axios from 'axios';

export default {
  methods: {
    requestServerPDF() {
      axios({
        url: '/api/generate-pdf',
        method: 'POST',
        responseType: 'blob',
        data: { content: 'PDF内容' }
      }).then(response => {
        const url = window.URL.createObjectURL(new Blob([response.data]));
        const link = document.createElement('a');
        link.href = url;
        link.setAttribute('download', 'server.pdf');
        document.body.appendChild(link);
        link.click();
      });
    }
  }
}

每种方法适用于不同场景,vue-pdf适合直接显示和导出现有PDF,jsPDF适合动态生成简单PDF,html2canvas+jsPDF组合适合将HTML转为PDF,pdfmake提供更丰富的样式控制,而服务器端方案适合复杂PDF生成需求。

标签: vuePDF
分享给朋友:

相关文章

vue实现建模

vue实现建模

Vue 实现建模的方法 在 Vue 中实现建模通常涉及数据绑定、组件化和状态管理。以下是几种常见的方法: 数据驱动建模 Vue 的核心是数据驱动视图。通过定义数据模型,Vue 会自动更新 DOM。例…

vue实现标签

vue实现标签

Vue 实现标签的方法 在 Vue 中实现标签功能可以通过多种方式完成,以下是几种常见的方法: 使用动态组件 动态组件可以根据不同的条件渲染不同的标签内容。通过 :is 属性动态绑定组件名,实现标签…

vue diff实现

vue diff实现

Vue Diff 算法实现原理 Vue 的虚拟 DOM Diff 算法(即 patch 过程)是其高效渲染的核心,主要通过对比新旧虚拟节点的差异,最小化 DOM 操作。以下是关键实现要点: 同层级比…

vue实现tabs

vue实现tabs

Vue实现Tabs组件的方法 使用动态组件和v-for指令 在Vue中创建Tabs组件可以通过动态组件和v-for指令实现。定义一个包含tab标题和内容的数组,使用v-for渲染tab标题,并通过点击…

mui实现vue

mui实现vue

mui 实现 Vue 的步骤 mui 是一个轻量级的前端框架,常用于移动端开发。结合 Vue 可以实现高效的开发体验。以下是具体实现方法。 安装 mui 和 Vue 通过 npm 或 yarn 安装…

vue原生实现

vue原生实现

Vue 原生实现方法 在 Vue 中实现原生功能通常指直接使用 Vue 的核心特性(如指令、响应式数据、组件等)而非依赖第三方库。以下是几种常见场景的原生实现方式: 数据绑定与响应式更新 Vue 的…