前端vue导出PPT,使用pptxgen.js

前言

公司新需求需要导出ppt给业务用,查阅资料后发现也挺简单的,记录一下。

如有不懂的可以留言!!!

ppt PPT

1.安装包

npm install pptxgenjs --save

2.引入包

在需要使用的文件中引入

import Pptxgenfrom "pptxgenjs"

导出事件

 <Button  type="primary"  @click="exportPPT">导出周报</Button>

这里有几个注意点说一下

  • slide 当前PPT页,可以通过addText(),addTable()等方法在当前页面添加文字、图表、图片等元素
  • Text 文字,可以对ppt文字颜色、字体大小、字体阴影、背景颜色、文字位置等属性进行配置,达到自己想要的效果
  • Table 表格, 可以添加ppt表格,但是表格内只能放文字和数字
  • Charts 图表 图表,可以支持常见的饼状图、柱状图、折线图等,配置项也挺全的,横纵坐标,legend等啥都有,基本可以满足常用。

ppt

3.使用

js代码

exportPPT() {
      // 1. 创建PPT
      const pres = new Pptxgen()

      // 2. 创建一个PPT页面,每调用一次 pres.addSlide() 都可以生成一张新的页面
      // 建议把每个页面的构造抽成一个个函数,然后通过函数调用生成新页面,代码不会很乱
      const slide = pres.addSlide()

      // 3. 调用addTetx(),在PPT页面中插入文字“Hello World from PptxGenJS...”
      // 括号里面是对文字的配置,文字横坐标x为1.5,纵坐标y为1.5,字体颜色 363636……
      // 关于坐标长度与px的转换 x 1 = 127~128px 左右
      slide.addText('需求进度', {
        x: 0.2, // 横坐标
        y: 0.4,
        color: '363636',
        fontSize: 24, // 字号
        fill: { color: 'F1F1F1' },
        align: 'left'
      })

      const rows = []

      // Row One: cells will be formatted according to any options provided to `addTable()`
      rows.push(['序号', '需求标题', '预计发版时间', '完成时间', '进度情况', '备注'])
      const border = [ // 表格边框
        { pt: 0.5, color: '#4f4f4f' },
        { type: 'none' },
        { pt: 0.5, color: '#4f4f4f' },
        { type: 'none' }
      ]
      const options = { valign: 'middle', border: border, color: '0000ff' }	// 单元格样式配置
      // Row Two: set/override formatting for each cell
      rows.push([
        { text: '1', options },
        { text: '对接小包物流商:京东国际=获取包裹轨迹状态', options },
        { text: '2023-11-02 00:00:00', options },
        { text: '2023-11-12 00:00:00', options },
        { text: '开发中', options },
        { text: '备注哦', options }
      ], [
        { text: '2', options },
        { text: '对接小包物流商:邦递国际 BDGJ', options },
        { text: '2023-11-22 00:00:00', options },
        { text: '2023-11-15 00:00:00', options },
        { text: '已上线', options },
        { text: '测试', options }
      ])

      slide.addTable(rows,
        {
          x: 0.5,
          y: 1.0,
          w: 9.0,
          h: 3,
          fontSize: 16,
          colW: [0.75, 2.0, 0.85, 0.8], // 表格每一列宽度
          rowH: 0.31, // 单元格默认高度
          color: '363636'
        }
      )

      // EX B: Pass the same objects as a cell's `text` value
      const arrTabRows = [
        [
          { text: 'Cell 1 A', options: { fontFace: 'Arial' } },
          { text: 'Cell 1 B', options: { fontFace: 'Courier' } }
        ]
      ]
      slide.addTable(arrTabRows, { x: 0.5, y: 4.5, w: 9, h: 1, colW: [1.5, 1.5, 6] })
      const slide2 = pres.addSlide()

      // 3. 调用addTetx(),在PPT页面中插入文字“Hello World from PptxGenJS...”
      // 括号里面是对文字的配置,文字横坐标x为1.5,纵坐标y为1.5,字体颜色 363636……
      // 关于坐标长度与px的转换 x 1 = 127~128px 左右
      slide2.addText('Amazon平台', {
        x: 0.4, // 横坐标
        y: 0.4,
        color: '363636',
        fontSize: 24, // 字号
        fill: { color: 'F1F1F1' },
        align: 'center'
      })
      slide2.addText('2023-10-01至2023-10-07主要国家发货发布', {
        x: 0.5, // 横坐标
        y: 0.8,
        color: '363636',
        fontSize: 24, // 字号
        fill: { color: 'F1F1F1' },
        align: 'center'
      })
      // let pres = new pptxgen();
      const dataChartAreaLine = [
        {
          name: '菜鸟-平邮',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [1500, 4600, 5156, 3167, 8510, 8009, 6006, 7855, 12102, 12789]
        },
        {
          name: '菜鸟-挂号',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [1000, 2600, 3456, 4567, 5010, 6009, 7006, 8855, 9102, 10789]
        },
        {
          name: '顺友-平邮',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [2000, 4200, 5156, 3167, 6510, 8009, 6006, 5855, 10102, 11789]
        },
        {
          name: '顺友-挂号',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [1300, 2100, 3456, 4567, 4010, 6009, 7006, 6855, 8102, 10789]
        },
        {
          name: '燕文-平邮',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [2000, 4200, 5156, 3167, 6510, 8009, 6006, 5855, 10102, 11789]
        },
        {
          name: '燕文-挂号',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [1300, 2100, 3456, 4567, 4010, 6009, 7006, 6855, 8102, 10789]
        }
      ]

      slide2.addChart(pres.ChartType.bar, dataChartAreaLine,
        {
          x: 0.6,
          y: 1.2,
          w: 8,
          h: 3.5,
          title: 'Amazon平台' // 标题
        }
      )
      const tempResult3 = '英国上涨5%,德国上涨10%,法国上涨12%,意大利上涨6%,西班牙上涨10%,XXXXX'
      slide2.addText(tempResult3, {
        x: 0.5, // 横坐标
        y: 5.2,
        color: '363636',
        fontSize: 18, // 字号
        fill: { color: 'F1F1F1' },
        align: 'center'
      })
      const slide3 = pres.addSlide()

      // 3. 调用addTetx(),在PPT页面中插入文字“Hello World from PptxGenJS...”
      // 括号里面是对文字的配置,文字横坐标x为1.5,纵坐标y为1.5,字体颜色 363636……
      // 关于坐标长度与px的转换 x 1 = 127~128px 左右
      slide3.addText('SMT平台', {
        x: 0.5, // 横坐标
        y: 0.5,
        color: '363636',
        fontSize: 24, // 字号
        fill: { color: 'F1F1F1' },
        align: 'center'
      })
      // let pres = new pptxgen();
      const dataChartAreaLine3 = [
        {
          name: '菜鸟-平邮',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [4500, 4000, 3156, 3167, 8510, 8009, 6006, 7855, 11102, 12789]
        },
        {
          name: '菜鸟-挂号',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [3000, 2600, 3456, 4567, 5010, 6009, 7006, 8855, 9102, 10789]
        },
        {
          name: '顺友-平邮',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [2000, 4200, 5156, 3167, 6510, 8009, 6006, 5855, 10102, 11789]
        },
        {
          name: '顺友-挂号',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [1300, 2100, 3456, 4567, 4010, 6009, 7006, 6855, 8102, 10789]
        },
        {
          name: '燕文-平邮',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [2000, 4200, 5156, 3167, 6510, 8009, 6006, 5855, 10102, 11789]
        },
        {
          name: '燕文-挂号',
          labels: ['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西', '智利'],
          values: [1300, 2100, 3456, 4567, 4010, 6009, 7006, 6855, 8102, 10789]
        }
      ]

      slide3.addChart(pres.ChartType.bar, dataChartAreaLine3,
        { x: 0.8, y: 1, w: 8, h: 3 }
      )
      const rows3 = []

      // Row One: cells will be formatted according to any options provided to `addTable()`
      rows3.push(['美国', '英国', '德国', '法国', '意大利', '西班牙', '加拿大', '墨西哥', '巴西'])
      // const border3 = [ // 表格边框
      //   { pt: 0.5, color: '#4f4f4f' },
      //   { type: 'none' },
      //   { pt: 0.5, color: '#4f4f4f' },
      //   { type: 'none' }
      // ]
      // const options = { valign: 'middle', border: border3, color: '0000ff' }	// 单元格样式配置
      // Row Two: set/override formatting for each cell
      // options 这个options是上面公用的,如果不共用,单独拉一个
      rows3.push([
        { text: '1500', options },
        { text: '4600', options },
        { text: '5156', options },
        { text: '3167', options },
        { text: '3167', options },
        { text: '3167', options },
        { text: '3167', options },
        { text: '3167', options },
        { text: '3167', options }
      ], [
        { text: '1500', options },
        { text: '3600', options },
        { text: '5156', options },
        { text: '1167', options },
        { text: '3167', options },
        { text: '2167', options },
        { text: '3167', options },
        { text: '4167', options },
        { text: '3167', options }
      ])

      slide3.addTable(rows3,
        {
          x: 1.2,
          y: 4,
          w: 8.0,
          h: 1.5,
          fontSize: 12,
          colW: [0.75, 2.0, 0.85, 0.8], // 表格每一列宽度
          rowH: 0.25, // 单元格默认高度
          color: '363636'
        }
      )
      slide3.addText('总计', {
        x: 0.6, // 横坐标
        y: 4.5,
        color: '363636',
        fontSize: 12, // 字号
        fill: { color: 'F1F1F1' },
        align: 'left'
      })
      slide3.addText('其它', {
        x: 0.6, // 横坐标
        y: 4.9,
        color: '363636',
        fontSize: 12, // 字号
        fill: { color: 'F1F1F1' },
        align: 'left'
      })

      pres.author = '作者_abin'

      pres.company = '公司'
      // 4. 生成PPT, 括号中的fileName,就是生成的 PPT名字,可以使用 .then 或者 .catch处理对应事件。
      pres.writeFile({ fileName: '20231124周报6.2.pptx' }).then(() => {
        this.$Message.success('导出成功')
      })
    },

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/186023.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

对未来新能源车测试工具的看法

汽车行业正在经历变革的说法算是比较轻描淡写的了&#xff0c;还记得我1983年加入这个行业时&#xff0c;行业聚焦点是引入发动机管理系统。当时还是以家庭掀背车为主的时代&#xff0c;发动机分析仪的体积像衣柜一样大&#xff0c;还没出现“CAN”通信协议。现在经常听到我的导…

为什么选择美国VPS服务器

企业、个人和组织都需要一个稳定高效的服务器来托管他们的网站、应用程序和数据。而对于中国用户来说&#xff0c;寻找一个性价比高的便宜美国VPS服务器&#xff0c;既能满足需求&#xff0c;又能节约成本&#xff0c;成为了一个非常重要的问题。 VPS即虚拟专用服务器&#xf…

SuperMap iDesktopX如何获取简单线的起终端点及坐标

作者&#xff1a;超图研究院技术支持中心-于丁 SuperMap iDesktopX如何获取简单线的起终端点及坐标 在GIS行业应用中&#xff0c;线数据的端点坐标有非常多的用处。 定位和可视化&#xff1a;线数据端点坐标可以用于定位和可视化线要素在空间中的位置。这对于地图制作、规划和…

[PyTorch][chapter 64][强化学习-DQN]

前言&#xff1a; DQN 就是结合了深度学习和强化学习的一种算法&#xff0c;最初是 DeepMind 在 NIPS 2013年提出&#xff0c;它的核心利润包括马尔科夫决策链以及贝尔曼公式。 Q-learning的核心在于Q表格&#xff0c;通过建立Q表格来为行动提供指引&#xff0c;但这适用于状态…

nvm安装及使用

文章目录 一、[介绍](https://github.com/nvm-sh/nvm)1.1、卸载node1.1.1、从控制面板的程序卸载node1.1.2、删除node的安装目录1.1.3、查找.npmrc文件删除1.1.4、逐一删除下列文件1.1.5、删除node环境变量1.1.6、验证是否卸载成功 二、安装2.1、window系统2.2、mac系统2.2.1、…

php高级工程师范文模板

以下简历内容以php高级工程师招聘需求为背景&#xff0c;我们制作了1份全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴&#xff0c;希望能帮助大家在众多候选人中脱颖而出。 php高级工程师简历在线制作下载&#xff1a;百度幻主简历 求职意向 求职类型&…

vue+springboot读取git的markdown文件并展示

前言 最近&#xff0c;在研究一个如何将我们git项目的MARKDOWN文档获取到&#xff0c;并且可以展示到界面通过检索查到&#xff0c;于是经过几天的摸索&#xff0c;成功的研究了出来 本次前端vue使用的是Markdown-it Markdown-it 是一个用于解析和渲染 Markdown 标记语言的 …

Vue 2.0源码分析-Virtual DOM

Virtual DOM 这个概念相信大部分人都不会陌生&#xff0c;它产生的前提是浏览器中的 DOM 是很“昂贵"的&#xff0c;为了更直观的感受&#xff0c;我们可以简单的把一个简单的 div 元素的属性都打印出来&#xff0c;如图所示&#xff1a; 可以看到&#xff0c;真正的 DOM …

C语言-指针讲解(3)

文章目录 1.字符指针变量1.1 字符指针变量类型是什么1.2字符指针变量的两种使用方法&#xff1a;1.3字符指针笔试题讲解1.3.1 代码解剖 2.数组指针变量2.1 什么是数组指针2.2 数组指针变量是什么&#xff1f;2.2.3 数组指针变量的举例 2.3数组指针和指针数组的区别是什么&#…

javascript判断是否是json格式

文章目录 一、问题二、解决三、总结3.1、定义 一、问题 工作中有用到JSON.parse这个来解析JSON字符串&#xff0c;这个时候突然有一次遇到JSON字符串是长串数字或数字字符串&#xff0c;主要是自己也没兼容好&#xff0c;就导致了一长串数字JSON.parse之后变成了e24等数字。主…

中低压MOSFET 2N7002W 60V 300mA 双N通道 SOT-323封装

2N7002W小电流双N通道MOSFET&#xff0c;电压60V电流300mA&#xff0c;采用SOT-323封装形式。超高密度电池设计&#xff0c;适用于极低的ros (on)&#xff0c;具有导通电阻和最大直流电流能力&#xff0c;ESD保护。可应用于笔记本中的电源管理&#xff0c;电池供电系统等产品应…

Selenium实现多页面切换

当使用 Selenium 进行自动化测试或爬取数据时&#xff0c;有时需要处理多个页面之间的切换。以下是一些可能需要多页面切换的情况&#xff1a; 1、打开新窗口/页面&#xff1a; 在当前页面上点击链接、按钮或执行某些操作时&#xff0c;可能会打开一个新的窗口或页面。此时&a…

Appium+Python+pytest自动化测试框架的实战

本文主要介绍了AppiumPythonpytest自动化测试框架的实战&#xff0c;文中通过示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 先简单介绍一下目录&#xff0c;再贴一些代码&#xff0c;代码里有注释 Basic目录下写的是一些公…

【C++】泛型编程 ⑮ ( 类模板示例 - 数组类模板 | 自定义类中持有指针成员变量 )

文章目录 一、支持 数组类模板 存储的 自定义类1、可拷贝和可打印的自定义类2、改进方向3、改进方向 - 构造函数4、改进方向 - 析构函数5、改进方向 - 重载左移运算符6、改进方向 - 重载拷贝构造函数 和 等号运算符 二、代码示例1、Array.h 头文件2、Array.cpp 代码文件3、Test…

io.lettuce.core.RedisCommandExecutionException

io.lettuce.core.RedisCommandExecutionException: ERR invalid password ERR invalid password-CSDN博客 io.lettuce.core.RedisCommandExecutionException /** Copyright 2011-2022 the original author or authors.** Licensed under the Apache License, Version 2.0 (the…

RabbitMQ基础教程

1.什么是消息队列 消息队列&#xff08;Message Queue&#xff09;&#xff0c;我们一般简称为MQ。消息队列中间件是分布式系统中重要的组件&#xff0c;具有异步性、松耦合、分布式、可靠性等特点。用于实现高性能、高可用、可伸缩和最终一致性架构。是大型分布式系统不可缺少…

JVM类加载的过程和JVM垃圾回收机制

文章目录 一、JVM类加载的过程1.1类加载的基本流程1.1.1加载1.1.2验证1.1.3准备1.1.4解析1.1.5初始化 1.2双亲委派模型 二、JVM垃圾回收机制2.1找到垃圾2.1.1引用计数(比如Python&#xff0c;PHP中用到)2.1.2可达性分析(比如Java中用到) 2.2释放垃圾2.2.1标记清除2.2.2复制算法…

RAM模型从数据准备到pretrain、finetune与推理全过程详细说明

提示&#xff1a;RAM模型&#xff1a;环境安装、数据准备与说明、模型推理、模型finetune、模型pretrain等 文章目录 前言一、环境安装二、数据准备与解读1.数据下载2.数据标签内容解读3.标签map内容解读 三、finetune训练1.微调训练命令2.load载入参数问题3.权重载入4.数据加载…

大数据技术之数据安全与网络安全——CMS靶场实训

大数据技术之数据安全与网络安全——CMS靶场实训 在当今数字化时代&#xff0c;大数据技术的迅猛发展带来了前所未有的数据增长&#xff0c;同时也催生了对数据安全和网络安全的更为迫切的需求。本篇博客将聚焦于大数据技术背景下的数据安全与网络安全&#xff0c;并通过CMS&a…

4.操作系统常见面试题(2)

3.4 虚拟内存 直接使⽤物理内存会产⽣⼀些问题 1. 内存空间利⽤率的问题&#xff1a;各个进程对内存的使⽤会导致内存碎⽚化&#xff0c;当要⽤ malloc 分配⼀块很⼤的内存空间时&#xff0c;可能会出现虽然有⾜够多的空闲物理内存&#xff0c;却没有⾜够⼤的连续空闲内存这种…