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日

相关文章

  • axios如何取消重复无用的请求详解

    当我们使用 axios 发送请求时,可能会出现多次发送同样的请求,这种情况可能会降低我们应用的性能。因此我们需要控制请求的发送,以避免重复无用的请求。 使用 axios 取消请求有 3 种方式: 使用 CancelToken 取消请求。 const CancelToken = axios.CancelToken; let cancel; axios.get(…

    Vue 2023年5月28日
    00
  • 如何使用vue开发公众号网页

    下面我将详细讲解如何使用Vue开发公众号网页的完整攻略。 步骤一:创建Vue项目 首先,我们需要使用Vue CLI工具来创建一个新的Vue项目。Vue CLI是一个标准的脚手架工具,能够帮助我们快速创建Vue应用。 安装Vue CLI: npm install -g @vue/cli 创建一个新的Vue项目: vue create my-app 步骤二:安装…

    Vue 2023年5月28日
    00
  • Vuei18n 在数组中的使用方式

    Vuei18n 是 Vue.js 官方提供的国际化插件。在实际开发中,我们通常需要在不同语种下展示不同的文案,这时候就需要使用 Vuei18n 来实现多语言切换。 Vuei18n 在数组中的使用方式非常方便,可以简单实现不同语种下的文本数据复用。下面是具体步骤: 1. 安装 Vuei18n Vuei18n 可以通过 npm 安装: npm install v…

    Vue 2023年5月29日
    00
  • 如何理解Vue的render函数的具体用法

    Vue的render函数是Vue的核心功能之一,它可以帮助我们实现更强大和自由度更高的组件化。如果你能够掌握Vue的render函数的具体用法,可以针对项目需求定制化你的组件,从而更好地实现业务需求。 以下是如何理解Vue的render函数的具体用法的完整攻略: 什么是Vue的render函数 Vue的render函数是一个高阶函数,它用来描述一个Vue组件…

    Vue 2023年5月27日
    00
  • vue组件入门知识全梳理

    Vue 组件入门知识全梳理 什么是 Vue 组件? 在 Vue 中,组件可以理解为独立的可复用的代码块,它可以将一些具有相同或类似功能的代码组织在一起,使其可以被反复使用。 组件具有自己的属性和行为,可以像 HTML 标签一样在模板中使用。每个组件都是一个独立的实例,因此可以用不同的参数和数据来渲染同一个组件。 创建组件 在 Vue 中,可以通过 Vue.c…

    Vue 2023年5月28日
    00
  • vue配置多页面的实现方法

    关于Vue配置多页面的实现方法,下面是一个完整的攻略。 1. 安装依赖 在开始前,需要安装vue-loader和vue-template-compiler这两个依赖。 npm install vue-loader vue-template-compiler –save-dev 2. 配置webpack 在webpack配置文件中,需要做如下修改。 在ent…

    Vue 2023年5月27日
    00
  • vue学习笔记之vue1.0和vue2.0的区别介绍

    下面我将详细讲解“vue学习笔记之vue1.0和vue2.0的区别介绍”的完整攻略。 标题 问题概述 在学习Vue时,我们很容易听到vue1.0和vue2.0的说法,并且会疑惑这两个版本之间有什么区别?本文旨在介绍vue1.0和vue2.0的区别。 Vue 1.0和Vue 2.0的区别 系统性能优化:Vue 2.0 与 1.0 相比,从系统层面进行性能优化处…

    Vue 2023年5月29日
    00
  • vue实现简单跑马灯效果

    接下来我将详细讲解如何使用Vue.js来实现简单跑马灯效果。 简介 跑马灯效果是一种常见的网页动效,指在页面上呈现一段文字或图片等内容循环滚动的效果。Vue.js是一款流行的JavaScript框架,提供了许多方便的工具和API,用于处理前端视图的更新和渲染。结合Vue.js的数据绑定和渲染功能,可以很容易地实现跑马灯的效果。 实现步骤 下面是实现跑马灯效果…

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