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

yizhihongxing

实现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日

相关文章

  • 浅谈Vue数据响应

    浅谈Vue数据响应 Vue作为一款现代化的前端框架,在数据响应方面使用了响应式编程的思想,以方便开发者管理数据。在本文中,我们将深入探讨Vue数据响应的相关知识。 什么是Vue数据响应 Vue数据响应是指当Vue的组件状态(data)发生变化时,视图自动更新。Vue通过使用响应式的观察者模式实现数据和UI的双向绑定(Two-Way-Binding),即当数据…

    Vue 2023年5月28日
    00
  • 在vue中使用inheritAttrs实现组件的扩展性介绍

    在Vue组件的开发中,有时候我们需要在父组件中定义一些prop传递给子组件,但同时也会传递一些不需要的属性,这时候就可以使用inheritAttrs来实现组件的扩展性。下面我将为大家详细讲解“在Vue中使用inheritAttrs实现组件的扩展性介绍”的完整攻略,希望能对大家的Vue组件开发有所帮助。 inheritAttrs介绍 在Vue中,inherit…

    Vue 2023年5月29日
    00
  • 详解Vue中状态管理Vuex

    详解Vue中状态管理Vuex 在Vue的大型应用中,数据状态的管理变得异常重要。Vuex是Vue中一个集中式的状态管理器,可以帮助我们方便地管理不同组件之间共享的数据。 Vuex核心概念 State Vuex使用单一状态树,即用一个对象来包含全部应用层级的状态。所有组件的状态存储在一个对象中,这个对象我们称之为state。Vuex的state是响应式的,当s…

    Vue 2023年5月27日
    00
  • Vue登录功能实现全套详解(含封装axios)

    关于“Vue登录功能实现全套详解(含封装axios)”的完整攻略,我将为你进行详细讲解。 1. 概述 本文将从以下方面讲解Vue登录功能的实现: Vue项目的创建和初始化; Vue路由的配置; Vue组件的编写; 使用axios封装HTTP请求; 进行登录验证。 2. Vue项目的创建和初始化 首先,我们需要使用Vue-CLI创建一个Vue项目,并且初始化项…

    Vue 2023年5月28日
    00
  • vite搭建vue2项目的实战过程

    首先,我们需要先了解一下Vite和Vue2的基础概念。 Vite是一个新型前端构建工具,它能够在开发环境下实现秒级启动的开发服务,使用Vue2的话需要安装vite@^1.0.0版本。Vue2是目前最流行的前端MVVM框架之一,我们可以使用它来构建前端项目。 那么,接下来就是使用vite搭建Vue2项目的实战过程了。 第一步:安装vite 使用yarn或npm…

    Vue 2023年5月28日
    00
  • vue实现登录页背景粒子特效

    下面是“vue实现登录页背景粒子特效”的完整攻略。 1. 准备工作 在开始实现登录页的粒子特效前,需要先安装 vue-particles 这个插件,并在项目中引入。 安装 vue-particles: npm install –save vue-particles 引入 vue-particles: 在 main.js 中引入: import VuePar…

    Vue 2023年5月28日
    00
  • vue路由划分模块并自动引入方式

    Vue 路由划分模块并自动引入方式可以让我们在开发过程中更加方便地管理和维护路由,以下是详细攻略: 划分模块 为了更好地管理路由,我们可以将相似的路由放置于同一文件夹中,比如: – src – pages – home – index.vue – children.vue – about – index.vue – children.vue 其中,home …

    Vue 2023年5月28日
    00
  • vue.js实现格式化时间并每秒更新显示功能示例

    下面是“vue.js实现格式化时间并每秒更新显示功能示例”的完整攻略。 思路分析 实现该功能需要使用Vue.js框架,其核心思路是将需要更新的时间保存在Vue实例的data中,然后利用Vue实例的响应式机制,在每秒钟更新时间的同时更新视图。 具体实现方法可以使用Vue.js提供的计算属性,或者通过Vue.js生命周期函数中的定时器实现。 计算属性实现示例 下…

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