vue实现word,pdf文件的导出功能

实现word,pdf文件的导出功能,需要使用vue和一些插件。以下是完整的攻略。

1. 安装依赖

首先需要在项目中安装相关依赖:

npm install --save file-saver xlsx pdfmake
  • file-saver:实现文件下载的插件
  • xlsx:实现excel文件导出的插件
  • pdfmake:实现pdf文件导出的插件

2. 配置操作

在vue.config.js中配置webpack操作:

const webpack = require('webpack')

module.exports = {
  configureWebpack: {
    plugins: [
      new webpack.optimize.LimitChunkCountPlugin({
        maxChunks: 6 // 将代码分块为6个块
      })
    ]
  }
}

上面的操作是为了解决pdf导出时出现的“Maximum call stack size exceeded”错误。

3. 示例1:实现excel文件导出

以用户列表为例,实现将用户数据导出为excel文件的功能。

<template>
  <div>
    <button @click="handleDownloadExcel">下载Excel文件</button>
    <table>
      <thead>
        <tr>
          <th>序号</th>
          <th>用户名</th>
          <th>年龄</th>
          <th>性别</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(user, index) in userList" :key="user.id">
          <td>{{ index+1 }}</td>
          <td>{{ user.userName }}</td>
          <td>{{ user.age }}</td>
          <td>{{ user.gender }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
import * as XLSX from 'xlsx'
import fileSaver from 'file-saver'

export default {
  data() {
    return {
      userList: [
        {
          id: 1,
          userName: '张三',
          age: 23,
          gender: '男'
        }
      ]
    }
  },

  methods: {
    handleDownloadExcel() {
      const data = this.userList
      const sheetName = '用户列表'
      const fileName = '用户列表.xlsx'

      const wb = XLSX.utils.book_new()
      const ws = XLSX.utils.json_to_sheet(data)
      XLSX.utils.book_append_sheet(wb, ws, sheetName)

      const wbout = XLSX.write(wb, { bookType: 'xlsx', type: 'binary' })
      const blob = new Blob([s2ab(wbout)], { type: 'application/octet-stream' })
      return fileSaver.saveAs(blob, fileName)
    }
  }
}

function s2ab(s) {
  const buf = new ArrayBuffer(s.length)
  const view = new Uint8Array(buf)
  for (let i = 0; i !== s.length; ++i) view[i] = s.charCodeAt(i) & 0xff
  return buf
}
</script>

具体实现过程如下:

  • 引入xlsx和file-saver插件
  • 定义数据和工具函数s2ab
  • 编写handleDownloadExcel方法,将用户数据转换成sheet,然后将sheet插入工作流中,并将工作流写入二进制文件
  • 最后通过file-saver插件将文件保存

4. 示例2:实现pdf文件导出

以商品列表为例,实现将商品数据导出为pdf文件的功能。

<template>
  <div>
    <button @click="handleDownloadPdf">下载PDF文件</button>
    <table>
      <thead>
        <tr>
          <th>序号</th>
          <th>商品名称</th>
          <th>价格</th>
        </tr>
      </thead>
      <tbody>
        <tr v-for="(product, index) in productList" :key="product.id">
          <td>{{ index+1 }}</td>
          <td>{{ product.productName }}</td>
          <td>{{ product.price }}</td>
        </tr>
      </tbody>
    </table>
  </div>
</template>

<script>
import pdfMake from 'pdfmake/build/pdfmake'
import pdfFonts from 'pdfmake/build/vfs_fonts'
import fileSaver from 'file-saver'

pdfMake.vfs = pdfFonts.pdfMake.vfs

export default {
  data() {
    return {
      productList: [
        {
          id: 1,
          productName: '商品1',
          price: 100
        }
      ]
    }
  },

  methods: {
    handleDownloadPdf() {
      const data = this.productList

      const tableBody = []
      tableBody.push([{ text: '序号', style: 'tableHeader' }, { text: '商品名称', style: 'tableHeader' }, { text: '价格', style: 'tableHeader' }])
      data.forEach(function (row) {
        const rowData = []
        rowData.push(row.id)
        rowData.push(row.productName)
        rowData.push(row.price)
        tableBody.push(rowData)
      })

      const docDefinition = {
        content: [
          { text: '商品列表', style: 'header' },
          { table: { headerRows: 1, body: tableBody }, layout: 'lightHorizontalLines' }
        ],

        styles: {
          header: { fontSize: 18, margin: [0, 0, 0, 10] },
          tableHeader: { bold: true, fontSize: 13, color: 'black' }
        }
      }

      const pdfDocGenerator = pdfMake.createPdf(docDefinition)
      pdfDocGenerator.getBlob((data) => {
        fileSaver.saveAs(data, '商品列表.pdf')
      })
    }
  }
}
</script>

具体实现过程如下:

  • 引入pdfmake和file-saver插件
  • 定义数据
  • 编写handleDownloadPdf方法,首先将数据转换成pdf表格需要的格式,然后将表格插入docDefinition中,最后通过pdfmake创建pdf文件,使用file-saver保存文件

以上就是vue实现word,pdf文件的导出功能的攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue实现word,pdf文件的导出功能 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 简单聊聊vue3.0 sfc中setup的变化

    下面我就为大家详细讲解一下“简单聊聊vue3.0 sfc中setup的变化”。 一、什么是.vue文件 在介绍.vue文件的地方,就不得不介绍一下 Vue.js 了。Vue.js 是一款非常流行的前端框架,主要用于构建用户界面以及单页应用程序(SPA)。而.vue文件则是 Vue.js 在开发中所使用的组件文件格式,它可以包括 HTML、CSS 和 Java…

    Vue 2023年5月28日
    00
  • Vuex的五大核心详细讲解

    Vuex的五大核心详细讲解 Vuex是Vue.js的官方状态管理库,它可以帮助我们在组件之间管理共享的状态。本篇文章将详细讲解VueX的五大核心,并提供相应的示例。 State State是Vuex的核心,它包含了多个应用级别的状态。它通常被称为store,并且通常放置在src/store/index.js中: import Vue from ‘vue’ i…

    Vue 2023年5月27日
    00
  • Vue.sync修饰符与$emit(update:xxx)详解

    让我来给你详细讲解一下Vue.sync修饰符与$emit(update:xxx)的使用方法。 Vue.sync修饰符 Vue.sync修饰符是Vue.js 2.3.0版本中添加的一个修饰符,它主要用于简化父子组件之间的双向数据绑定。在Vue 2.3.0版本中,你可以使用Vue.sync修饰符来实现子组件对父组件数据的更新。 <template> …

    Vue 2023年5月28日
    00
  • Vue新搭档TypeScript快速入门实践记录

    下面是关于《Vue新搭档TypeScript快速入门实践记录》的详细攻略。 什么是 TypeScript TypeScript 是 JavaScript 的超集,支持静态类型和其他一些语言特性,它最终会被编译成 JavaScript 代码。它大大提升了代码的可维护性和规模化开发能力。在 Vue 项目中使用 TypeScript,可以使代码更加清晰、可读性更高…

    Vue 2023年5月27日
    00
  • vue2.x 对象劫持的原理实现

    Vue.js 通过 Object.defineProperty() 函数,对对象的属性进行劫持,实现了数据双向绑定的功能。 具体的实现过程如下: Vue.js 给每个组件对象(包含 data 属性)都创建了一个 Observer 对象,并将 data 属性的值递归地遍历,使用 Object.defineProperty() 函数将 data 属性的每个属性都…

    Vue 2023年5月28日
    00
  • vue+koa2搭建mock数据环境的详细教程

    介绍一下“vue+koa2搭建mock数据环境的详细教程”。 简介 在开发过程中,经常需要测试前端页面与后端接口之间的数据交互,而真正的接口并不一定已经实现,这时候我们往往需要使用 mock 数据模拟真实数据。本教程将介绍如何使用 vue 和 koa2 框架搭建一个 mock 数据环境。 步骤 1. 安装 vue-cli 和 koa-generator 首先…

    Vue 2023年5月28日
    00
  • Vue中如何实现在线预览word文件、excel文件

    要在Vue中实现在线预览Word文件或Excel文件,可以使用第三方插件view-doc和vue-embed, 具体步骤如下: 1. 安装插件 在Vue项目中安装view-doc和vue-embed插件。 npm install view-doc vue-embed –save 2. 引入插件并定义组件 在Vue项目的入口文件中,引入view-doc和vu…

    Vue 2023年5月28日
    00
  • Springboot+Netty+Websocket实现消息推送实例

    这里是“Springboot+Netty+Websocket实现消息推送实例”的详细攻略,主要步骤包括搭建项目、实现Netty的WebSocket服务、前端页面的制作和测试。 一、搭建项目 创建一个SpringBoot项目 在pom.xml文件中添加Netty和WebSocket的依赖(示例见下) xml <dependency> <gro…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部